Преобразование кодировки документа при чтении с помощью dom4j - PullRequest
0 голосов
/ 11 июня 2009

Можно ли как-то преобразовать анализируемый документ SAXReader от dom4j из кодировки ISO-8859-2 в UTF-8? Мне нужно, чтобы это происходило при разборе, чтобы объекты, созданные dom4j, уже были Unicode / UTF-8 и выполняли такой код, как:

"some text".equals(node.getText());

возвращает истину.

Ответы [ 2 ]

2 голосов
/ 11 июня 2009

Это делается автоматически dom4j. Все String экземпляры в Java имеют общую декодированную форму; после создания String невозможно определить исходную кодировку символов (или даже если строка была создана из закодированных байтов).

Просто убедитесь, что в документе XML задана кодировка символов (которая требуется, если это не UTF-8).

0 голосов
/ 11 июня 2009

Декодирование происходит в (или до) InputSource (до SAXReader). Из javadocs этого класса:

Анализатор SAX будет использовать объект InputSource, чтобы определить, как читать ввод XML. Если есть доступный поток символов, парсер будет читать этот поток напрямую, не обращая внимания на любое объявление кодировки текста, найденное в этом потоке. Если нет потока символов, но есть поток байтов, синтаксический анализатор будет использовать этот поток байтов, используя кодировку, указанную в InputSource, или иначе (если кодировка не указана), автоматически определяющую кодировку символов с использованием алгоритма, такого как спецификация XML. Если ни символьный поток, ни поток байтов недоступны, анализатор попытается открыть соединение URI с ресурсом, идентифицированным системным идентификатором.

Так что это зависит от того, как вы создаете InputSource. Чтобы гарантировать правильное декодирование, вы можете использовать что-то вроде следующего:

InputStream stream = <input source>
Charset charset = Charset.forName("ISO-8859-2");
Reader reader = new BufferedReader(new InputStreamReader(stream, charset));
InputSource source = new InputSource(reader);
...