Проблема с XDocument и BOM (порядок байтов Mark)

Существует частичный ответ, так как эти зависимости Maven больше не доступны. Пожалуйста, обратитесь к этому блогу для альтернативного исправления.

5
задан John Sheehan 17 October 2008 в 06:10
поделиться

7 ответов

Если Вы пишете XML с XmlWriter, можно установить Кодирование на то, которое было инициализировано для игнорирования BOM.

EG: Система. Текст. Конструктор UTF8ENCODING берет булевскую переменную, чтобы указать, хотите ли Вы BOM, таким образом:

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

Создал бы XmlWriter с кодировкой UTF-8 и без Порядка байтов Mark.

9
ответ дан 18 December 2019 в 07:58
поделиться

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

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

3
ответ дан 18 December 2019 в 07:58
поделиться

Своего рода комбинация регистраций, возможно, что-то вроде этого:


MemoryStream ms = new MemoryStream();
StreamWriter writer = new StreamWriter(ms, new UTF8Encoding(false));
xmlDocument.Save(writer);
2
ответ дан 18 December 2019 в 07:58
поделиться

Вы могли, вероятно, использовать Систему. Текст. Кодирование. Преобразуйте () на выводе; Так же, как что-то для попытки не что-то я протестировал.

0
ответ дан 18 December 2019 в 07:58
поделиться

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

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

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

1
ответ дан 18 December 2019 в 07:58
поделиться

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

0
ответ дан 18 December 2019 в 07:58
поделиться

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

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

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

XmlWriter writer = XmlWriter.Create("foo.xml", settings); 
myXDocument.WriteTo(writer); 
5
ответ дан 18 December 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: