Является ли это допустимым символом UTF8 в этом XML-файле?

Я получил некоторый XML из вышестоящего источника данных.

введите здесь описание изображения

Я не уверен, что эти странные символы допустимы в UTF8, или исходный код все испортил. то есть неверные данные на входе => неверные данные на выходе.

Я предполагаю, что было передано следующее:

Value in XML file  | Unicode Value | UTF-8 Value  | English Description
-------------------------------------------------------------------------------------------
’ | U+2019        | \xe2\x80\x99 | RIGHT SINGLE QUOTATION MARK
• | U+2022        | \xe2\x80\xa3 | BULLET
&              | -not unicode- | --           | Ampsersand, HTML Encoded.

я чувствую, что \ в начале значения UFT-8 вроде как... закодировано, но .. сделано неправильно?

Может кто-нибудь объяснить, на что я смотрю, чтобы я знал, как правильно это расшифровать. Что также расстраивает, так это то, что я чувствую, что это может быть смесь кодировок, которая сделает все ужасно :(

Ссылка: http://utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128&utf8=string-literal


person Pure.Krome    schedule 05.09.2017    source источник


Ответы (1)


Это не вопрос UTF-8 в XML, который вы получаете, потому что экранирование символов &#xXX; кодирует символы, и поэтому нет вопроса о том, что такое кодировка. [На самом деле, это может быть так, потому что все, что создает XML, было написано кем-то, кто не понимает, как должны работать побеги XML. В конце концов, когда что-то содержит ошибку, нет смысла предполагать, что оно работает правильно, пока не будет доказано обратное.]

Похоже, что что-то попутно обработало какой-то совершенно хороший UTF-8, как если бы это была другая кодировка, а затем решило избежать результатов. Некоторые из символов, которые вы получаете в результате этого ("U+0080" и "U+0099"), являются символами, которые разрешены в XML, но настоятельно не рекомендуются. Некоторые («а» и «¢») являются вполне разумными символами (хотя и произведены неразумными способами), что делает решение избежать их почти столь же странным, как любая ошибка, которая привела к их появлению.

Каким бы ни был источник моджибаке, вы получаете моджибаке, поэтому, если вы можете пожаловаться или сообщить об ошибке выше по течению, сделайте это и исправьте ее в источнике, а не пытайтесь исправить что-то сломанное.

В противном случае вам придется попытаться удалить символы, закодировать их, как если бы они были в любом формате, о котором они думали (я бы предположил, что это ISO Latin 1, но есть и другие возможности), а затем декодировать их, как если бы они были UTF -8. Нет никаких обещаний, что это не нанесет столько же вреда правильному фрагменту документа, сколько исправит этот ошибочный фрагмент.

person Jon Hanna    schedule 05.09.2017
comment
ТИЛ: mojibake - person Pure.Krome; 05.09.2017
comment
Хорошо, так что справедливо сказать, что рассматриваемые символы являются моджибаке ? Потому что таково было мое внутреннее чувство... и из-за этого я собирался остановиться... и пойти вверх по течению, чтобы они что-то починили. - person Pure.Krome; 05.09.2017
comment
Ага. Это восходящая проблема, поэтому восходящее решение всегда будет лучшим. - person Jon Hanna; 05.09.2017
comment
Чтобы было ясно, сам вопрос указывает на неправильное представление. Ссылки на цифровые символы кодируют кодовые точки Unicode, а не кодовые единицы UTF-8. Нет такой вещи, как символ UTF-8. - person Tom Blodget; 06.09.2017