Непредвиденная исключительная ситуация от конструктора XDocument

В целом Вы не можете сделать этого. UTF-8 способен к кодированию любой кодовой точки Unicode. ISO-8859-1 может обработать только крошечную часть их. Так, транскодирование от ISO-8859-1 до UTF-8 не является никакой проблемой. Движение назад от UTF-8 до ISO-8859-1 вызовет "символы замены" (�) для появления в тексте, когда неподдерживаемые символы найдены.

Для транскодирования текста:

byte[] latin1 = ...
byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8");

или

byte[] utf8 = ...
byte[] latin1 = new String(utf8, "UTF-8").getBytes("ISO-8859-1");

можно осуществить больше контроля при помощи низшего уровня Charset API. Например, можно повысить исключение, когда un-encodable символ найден, или используйте другой символ для текста замены.

17
задан Drew Noakes 16 August 2012 в 12:02
поделиться

1 ответ

Когда вы используете первый метод, вы используете перегрузку XDocument, которая сначала принимает XDeclaration, а затем параметры для содержимого. Однако, когда вы используете второй подход, вы используете перегрузку, которая принимает параметры для содержимого. XDeclaration в вашем массиве object [] проходит как контент, и вот где он взрывается.

См. Здесь: http://msdn.microsoft.com/en-us/library/system.xml. linq.xdocument.xdocument.aspx

14
ответ дан 30 November 2019 в 12:00
поделиться
Другие вопросы по тегам:

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