Проблема с XDocument и спецификацией (метка порядка байтов) - PullRequest
5 голосов
/ 01 октября 2008

Есть ли способ вывести содержимое XDocument без спецификации? При чтении вывода с помощью Flash это вызывает ошибки.

Ответы [ 7 ]

9 голосов
/ 01 октября 2008

Если вы пишете XML с помощью XmlWriter, вы можете установить для параметра Encoding значение, которое было инициализировано, чтобы исключить спецификацию.

EG: конструктор System.Text.UTF8Encoding принимает логическое значение, чтобы указать, требуется ли спецификация, поэтому:

XmlWriter writer = XmlWriter.Create("foo.xml");
writer.Settings.Encoding = new System.Text.UTF8Encoding(false);
myXDocument.WriteTo(writer);

Создает XmlWriter с кодировкой UTF-8 и без метки порядка байтов.

5 голосов
/ 24 июня 2010

Небольшой мод на ответ Криса Уэнама.

Нельзя изменить кодировку после создания XmlWriter, но вы можете установить ее с помощью XmlWriterSettings при создании XmlWriter

XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = new System.Text.UTF8Encoding(false); 

XmlWriter writer = XmlWriter.Create("foo.xml", settings); 
myXDocument.WriteTo(writer); 
3 голосов
/ 27 февраля 2009

Я не могу добавить комментарий выше, но если кто-то воспользуется предложением Криса Уэнама, не забудьте избавиться от автора! Я потратил некоторое время на размышления о том, почему мой вывод был усечен, и это было причиной.

Предложить using(XmlWriter...) {...} изменить предложение Криса

2 голосов
/ 01 октября 2008

Вид комбинации сообщений, может быть, что-то вроде этого:


MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms, new UTF8Encoding(false));
xmlDocument.Save(writer);
1 голос
/ 02 октября 2008

Как уже говорилось, эта проблема имеет неприятный запах.

В соответствии с этой запиской о поддержке Flash использует спецификацию для устранения неоднозначности между UTF-16BE и UTF-16LE, что и должно быть. Поэтому вы не должны получать сообщение об ошибке от Flash: XDocument создает правильно сформированный XML в кодировке UTF16, а Macromedia утверждает, что Flash может читать правильно сформированный XML в кодировке UTF16.

Это заставляет меня подозревать, что с какой бы проблемой вы ни столкнулись, это, вероятно, не вызвано спецификацией. Если бы это был я, я бы больше копался, ожидая, что настоящая проблема где-то в другом месте.

0 голосов
/ 01 октября 2008

Преобразуйте его в строку, затем удалите метку самостоятельно.

0 голосов
/ 01 октября 2008

Возможно, вы можете использовать System.Text.Encoding.Convert () на выходе; Так же, как что-то, чтобы попробовать, а не то, что я проверял.

...