Кодировка для XML-документа, содержащего U + 001A - PullRequest
1 голос
/ 08 декабря 2011

У меня есть XML-документ, который создается из некоторого контента, который люди копируют / вставляют из самых разных мест (хотя в основном это документы Word).

Это выглядит так:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <data> <![CDATA[
         (whatever was pasted)
    ]]></data>        
</response>

Я всегда использовал кодировку UTF-8 или iso-8859-1, но теперь кто-то ушел и скопировал / вставил символ Unicode U+001A (0x1a), и я не могу найти кодировка, которая примет это. Все, что я помещаю в файл XML (например, Firefox, Internet Explorer, XML Spy), говорит о том, что он недействителен, независимо от используемого типа кодировки.

Есть ли какая-то кодировка, которую я могу использовать, чтобы остановить падение файла, или мне нужно начать убирать все эти символы один за другим?

Ответы [ 3 ]

6 голосов
/ 08 декабря 2011

U + 001A не является допустимым символом в документе XML. Допустимый диапазон символов в соответствии с спецификацией :

Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
3 голосов
/ 08 декабря 2011

Символ U + 001A находится в области C0 Controls, которая в основном (включая U + 001A) запрещена в XML.Маловероятно, чтобы кто-то входил в него нарочно.Скорее, он был сгенерирован программным обеспечением, вероятным при выполнении преобразования кода символа и обнаружении искаженных данных (например, байта, который не имеет определенного значения в исходной кодировке).Символ U + 001A (SUBSTITUTE) предназначен для такого использования;см. мой краткий справочник по элементам управления C0 .

Если вы не можете отследить и исправить конверсию (или другой процесс), который привел к U + 001A, я бы предложил заменить егоU + FFFD ЗАМЕНА ХАРАКТЕР.В некотором смысле это Unicode-эквивалент U + 001A.(Последний, конечно, тоже в Unicode, но запрещен во многих контекстах.) Однако он имеет видимый глиф, хотя глиф существует только в нескольких шрифтах;проверьте запись fileformat.info на U + FFFD для получения дополнительной информации.

Дело в том, что изменение U + 001A на U + FFFD делает данные приемлемыми в XML и сохраняет информацию об ошибке данных на уровне символов.

1 голос
/ 08 декабря 2011

Предварительная обработка исходных данных с кодировкой символов Unicode, которые не поддерживаются документами XML самостоятельно.например, используйте кодировки символов HTML:

<?xml version="1.0" encoding="UTF-8"?>
<response>
    <data> <![CDATA[This is &#x1a; a test.]]></data>        
</response>

При повторном чтении вам придется постобработать данные, чтобы преобразовать кодировку HTML обратно в правильный символ Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...