У меня есть файл XML, который начинается с <?xml version="1.0" encoding="iso-8859-2"?>
. Я прочитал это следующим образом:SAXException iso-8859-2
SAXParserFactory.newInstance().newSAXParser().parse(is, handler);
где is
является InputStream и handler
некоторый произвольный обработчик. Тогда я получаю это исключение:
org.apache.harmony.xml.ExpatParser$ParseException: At line 41152, column 17: not well-formed (invalid token)
На самом деле есть степень знак в этом положении, заключенный в CDATA, как это:
<![CDATA[something °]]>
Использование кодировки изо-8859-2, то анализатор должен принять почти любой символ, включая этот. Кажется, это не так. Что я делаю не так?
EDIT
Я делаю все это на Android.
Странно: кажется, что парсер полностью игнорирует атрибут кодирования. Я преобразовал файл в UTF-8, оставив заголовок как есть, и теперь моя программа может прочитать его без ошибок. Почему это??
(я делает InputStream как это:. new BufferedInputStream(new FileInputStream(filename))
, т.е. без считывателя, так что не может быть ошибка)
Вы действительно уверены, что данные действительно закодированы как ISO-8859-2? –
Согласно [Wikipedia] (https://en.wikipedia.org/wiki/ISO/IEC_8859-2) этот символ кодируется как B0 в ISO-8859-2. Это фактический байт в этой позиции в файле? –
Да, я открыл его в Notepad ++, он говорит «ANSI-кодировка», и у меня есть венгерская Windows, поэтому я уверен. – szali