Я пытаюсь разобрать файл XML, используя DocumentBuilderFactory следующим образом:Ошибка при разборе файла XML в DOM
DocumentBuilderFactory ndsParserFactory = DocumentBuilderFactory.newInstance();
ndsParserFactory.setNamespaceAware(true);
DocumentBuilder ndsParser = ndsParserFactory.newDocumentBuilder();
Document ndsDocument = ndsParser.parse(ndsFileInputStream);
где ndsFileInputStream является InputStream оберточной файл, содержащий XML.
Я получаю исключение, когда файл содержит символ Unicode, такой как Δ. Когда я удаляю строку, содержащую оскорбительный символ, разбор работает отлично.
Файл содержит характеристику <?xml version="1.0" encoding="utf-8"?>
header.
Мне интересно, если я не буду правильно настраивать экземпляр DocumentBuilderFactory (или DocumentBuilder), чтобы обрабатывать символ Δ.
Редактировать (с комментариями):
Полное описание: Это Android, и я в том числе XML-файлы (с расширением файла NDS) в качестве активов в моем Android приложение. Я обращаюсь к ним через AssetManager, у которого есть удобный метод для открытия файла актива в InputStream, который затем передается методу parse моего DocumentBuilder. - d сварка 16 часов назад
Я заметил, что папка с ресурсами использует кодировку CP1252 по умолчанию для своего содержимого. Поэтому я изменил это на UTF8. Не повезло. Затем я удалил спецификацию из одного из файлов NDS (по ссылке) и попробовал еще раз. Не повезло. Я думаю, что файл APK (который сжат, как ZIP-файл) каким-то образом искажает не-ASCII XML. Я думаю, мне придётся прибегнуть к получению файлов NDS на устройство Android другими способами ...
Вы проверили, что файл * на самом деле содержит * последовательность правого байта для символа дефолта [http://www.fileformat.info/info/unicode/char/394/index.htm)? Откройте файл в шестнадцатеричном редакторе, вы увидите последовательность «0xCE 0x94». Вы? – Tomalak
Да, я вижу 0xCE 0x94 (окруженный 1-байтовыми ASCII-кодами, представляющими стандартные символы). – dWeld
Когда вы открываете XML-файл с помощью другого инструмента - например, ваш веб-браузер - он загружается и отображается правильно? Если это так, файл в порядке, и ваша настройка Java неверна. Сравните здесь: http://docs.oracle.com/javase/tutorial/i18n/text/stream.html, а именно третий абзац (* «Если вы опустите идентификатор кодировки ...» *). – Tomalak