Первое, что вы должны сделать, это определить реальную кодировку XML-файла, как предполагает Томалак, а не кодировку, указанную в заголовке.
Вы можете начать, открыв его с помощью Internet Explorer. Если кодировка неверна, вы можете увидеть такую ошибку:
Недопустимый символ был найден в тексте
содержание. Ошибка обработки ресурса
...
Или следующий:
Переключиться с текущей кодировки на
указанная кодировка не поддерживается.
Ошибка обработки ресурса ...
Следующим шагом будет использование текстового редактора с поддержкой нескольких кодировок. Вы можете использовать Notepad ++ , который бесплатен, прост в использовании и поддерживает несколько кодировок. Независимо от того, что xml-заголовок говорит о кодировке, редактор пытается определить кодировку файла и отображает ее в строке состояния.
Если вы определили, что кодировка файла правильная, возможно, вы неправильно обрабатываете кодировку внутри Java. Примите во внимание, что строки Java имеют формат UTF-16 и по умолчанию при преобразовании из / в байтовые массивы, если кодировка не указана, Java по умолчанию использует системную кодировку (Windows-1521 под Windows или UTF-8 в современных Linux). Некоторые преобразования кодирования вызывают появление «странных» символов, например преобразований между фиксированными 8-битными кодировками (т. Е. Windows-1252 <-> ISO-8859-1). Другие преобразования приводят к возникновению конечных исключений из-за недопустимых символов (попробуйте импортировать текст Windows-1252 как UTF-8, например).
Пример неверного кода:
// Parse the input
SAXParser saxParser = factory.newSAXParser();
InputStream is = new ByteArrayInputStream(stringToParse.getBytes());
saxParser.parse( is, handler );
Преобразование stringToParse.getBytes()
возвращает по умолчанию строку, закодированную как Windows-1252 на платформах Windows. Если текст XML был закодирован в ISO-8859-1 на этом этапе, у вас неправильные символы. Правильный шаг должен читать XML как байты, а не String, и позволить SAX управлять кодировкой xml.