XmlDocument неправильно читает UTF-8 'e-sharp' персонаж - PullRequest
0 голосов
/ 14 декабря 2011

Я читаю документ XML, который содержит символ é (e острый).Документ был сохранен как UTF-8, и я подтвердил, что это символ UTF-8 с двоичным устройством чтения файлов (это c3 + a9).Однако после обработки символ становится трехбайтовым беспорядком (c3 + 83 + c2).

Я предполагаю, что .NET пытался преобразовать символ (ы) в UTF-16 (это мое лучшее предположение) или разделил символ на один однобайтовый символ и один двухбайтовый UTF-8 символов.

Я загружаю документ следующим образом:

XmlDocuments document = new XmlDocuments();
document.Load("z:\\source.xml");

Как мне загрузить это?Должен ли я читать это через поток в кодировке UTF-8?


[Edit]

Я забыл упомянуть, что загружаемый документ объявляет себя как UTF-8.

<?xml version="1.0" encoding="utf-8"?>

1 Ответ

3 голосов
/ 14 декабря 2011

é кодируется в UTF-8 как C3 A9.Эти два байта интерпретируются в кодовой странице Windows-1252 (иначе кодовая страница ANSI или Encoding.Default в .NET) как é.Повторное кодирование их в UTF-8 дает C3 83 C2 A9, что соответствует первым трем байтам вашего "трехбайтового беспорядка".Похоже, что какой-то код где-то выполняет байты Windows-1252 -> System.String chars -> UTF-8 байтов.

Я никогда не видел, чтобы .NET использовал неправильную кодировку, когда она явно указана вОбъявление XML (XmlDocument.Load должно «просто работать»), поэтому я подозреваю, что в вашем коде есть ошибка.

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

...