Код: Выделить всё
\u1F4A5
Этот эмодзи правильно сериализован в большей части файла.
Код: Выделить всё
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);
//...
}
Чем можно объяснить такое поведение?
Подробнее здесь: https://stackoverflow.com/questions/791 ... -character