xml: невозможно отследить недопустимый символ - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь преобразовать xml-файл с помощью xslt, но не могу отследить символ, который приводит к тому, что синтаксический анализатор задыхается от файла. во время преобразования я получаю эту ошибку:

myfile.xml:1: parser error : Input is not proper UTF-8, indicate encoding !
Bytes: 0xBC 0x29 0x20 0x69
g said premises on the West which does not encroach over one and one quarter (1 
                                                                           ^
unable to parse myfile.xml

, когда я ищу в этом месте в разных редакторах, некоторые редакторы понимают код и отображают его визуализированный символ:

over one and one quarter (1 ¼)

и другиеРедакторы не отображают системный символ по умолчанию:

uarter (1 �)

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

Есть ли какой-либо способ определить, какой замене должна быть дана байтовая информация выше?

это пролог xml

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

, когда я беру вышеупомянутую строку и создаю массив символов и массив байтов в Java, я получаю

char : ¼ bytes -68

, и если ясделайте тест:

if (c == '\u00BC') {
            System.out.println("matched one quarter!");
}

тогда он совпадет ... есть ли просто способ зацикливаться в Java и выполнять поиск / замену таким образом?

поиск / замена должны быть выполнены до преобразования xslt, так как ошибка синтаксического анализа захлебнет процесс до его запуска;Я думаю, что общий вопрос, каков наилучший способ идентифицировать эти плохие символы и заменить их десятичными единицами? как показано выше, некоторые редакторы отображают символ, другие выдают ошибку и заменяют на '?'или какой-то другой системный символ.

Я думаю, что приведенный выше тест java char кажется лучшим решением на сегодняшний день.

1 Ответ

0 голосов
/ 08 октября 2019

Принимая «Ввод неверный UTF-8» по номиналу и что «¼» равен 0xC2 0xBC в UTF-8, и принимая «указать кодировку!»по сути, я бы сказал, что вам следует вернуться к источнику файла или спецификации или чего-либо еще для информации и сообщить вашему процессору XSLT кодировку символов файла.

Хорошо, теперь, когда вы показалив декларации XML указано UTF-8, у вас есть недопустимый файл. Никакой процессор XSLT не обязан обрабатывать его вообще. Отправьте его обратно отправителю.

...