C# XmlWriter пропускает старший суррогатный символC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# XmlWriter пропускает старший суррогатный символ

Сообщение Anonymous »

Я использую класс XmlWriter для создания большого XML-файла. Все работает так, как ожидалось, за исключением одного конкретного файла, который мне нужно создать. У меня есть строка, содержащая 💥 () эмодзи.
Этот эмодзи правильно сериализован в большей части файла.

Код: Выделить всё

Example 💥
Однако внезапно я получаю такую ​​строку:

Код: Выделить всё

Example � (asdf)
Строка «Имя» не совпадает, но обе содержат одинаковые смайлы, а вторая строка также правильно сериализуется в других частях файла.
Я понимаю, что строки хранения .NET используют UTF-16. В этой кодировке этот смайлик соответствует 0xD83D 0xDCA5. При отладке этой проблемы я проверил область памяти, в которой хранилась переменная, и увидел, что все байты были там.
Таким образом, это почти похоже на то, что XmlWriter пропускает старший суррогат характер. Мне не удалось воспроизвести эту проблему в меньшем тесте. С этим большим файлом это происходит только тогда, когда приложение работает внутри нашего кластера Kubernetes. Если я запускаю один и тот же код локально, я каждый раз получаю правильную сериализацию.
Вот упрощенная версия моего кода:

Код: Выделить всё

var writer = XmlWriter.Create(stream, new XmlWriterSettings
{
Encoding = Encoding.GetEncoding(
"Windows-1252",
new EncoderReplacementFallback(),
new DecoderReplacementFallback()
),
Indent = true,
});

//...

foreach(var item in items){
//...
writer.WriteElementString("Name", item.Name);
//...
}
Изначально я использовал .NET 6, и обновление до .NET 8 не помогло. Приложение работает внутри Docker-контейнера с mcr.microsoft.com/dotnet/aspnet:8.0 в качестве базового образа, поэтому, кроме ядра, среда должна быть везде одинаковой.
Чем можно объяснить такое поведение?

Подробнее здесь: https://stackoverflow.com/questions/791 ... -character
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • C# XmlWriter пропускает старший суррогатный символ
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Сортировать столбцы унитарной матрицы numpy так, чтобы старший элемент каждого столбца находился на диагонали.
    Anonymous » » в форуме Python
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • XmlWriter записывает все в одну строку
    Anonymous » » в форуме C#
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous
  • XmlWriter обрезает мою строку
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Есть ли способ настроить вывод сериализации XmlWriter?
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»