Как мне сделать XmlDocument.Save () для кодирования = «us-ascii» с цифровыми символами вместо знаков вопроса?

Моя цель - получить двоичный буфер (MemoryStream.ToArray() дастbyte[] в данном случае) XML без потери символов Unicode. Я ожидаю, что сериализатор XML будет использовать числовые символьные ссылки для представления чего-либо недопустимого в ASCII. Пока что у меня есть:

using System;
using System.IO;
using System.Text;
using System.Xml;

class Program
{
    static void Main(string[] args)
    {
        var doc = new XmlDocument();
        doc.LoadXml("<x>“∞π”</x>");
        using (var buf = new MemoryStream())
        {
            using (var writer = new StreamWriter(buf, Encoding.ASCII))
                doc.Save(writer);
            Console.Write(Encoding.ASCII.GetString(buf.ToArray()));
        }
    }
}

Вышеуказанная программа выдает следующий вывод:

$ ./ConsoleApplication2.exe
<?xml version="1.0" encoding="us-ascii"?>
<x>????</x>

Я разобрался как сказатьXmlDocument.Save() использоватьencoding="us-ascii"- вручаяTextStream сTextStream.Encoding установлен вEncoding.ASCII. Документация говоритThe encoding on the TextWriter determines the encoding that is written out, Но как я могу сказать, что я хочу, чтобы он использовал числовые символьные объекты вместо поведения с потерями по умолчанию? Я проверял этоdoc.Save(Console.OpenStandardOutput()) записывает ожидаемые данные (без объявления XML) как UTF-8 со всеми правильными символами, поэтому я знаю, чтоdoc содержит информацию, которую я хочу сериализовать. Нужно только найти правильный способ сообщить XML-сериализатору, что я хочуencoding="us-ascii" с персонажами…

Я понимаю, что это может быть нетривиально писать документы XML, которые обаencoding="us-ascii" и поддерживает такие конструкции, как<π/> (Я думаю, что это может быть выполнимо только с определениями внешнего типа документа. Да,Я пытался просто для удовольствия.). Но я думал, что было довольно распространено выводить объекты для не-ASCII символов в XML-документе ASCII для поддержки сохранениясодержание а такжезначение атрибута символьные данные в Unicode-недружественных средах. Я думал, что числовые ссылки на символы, представляющие символы Юникода, аналогичны использованию base64 для защиты большого двоичного объекта при сохранении более удобочитаемого содержимого. Как мне сделать это с .NET?

Ответы на вопрос(1)

Ваш ответ на вопрос