使用dom4j读取时转换文档编码

时间:2009-06-11 16:29:31

标签: java encoding dom4j

有什么方法可以将dom4j的SAXReader解析的文件从ISO-8859-2编码转换为UTF-8?我需要在解析时发生这种情况,以便dom4j创建的对象已经是Unicode / UTF-8并运行如下代码:

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

返回true。

2 个答案:

答案 0 :(得分:2)

这是由dom4j自动完成的。 Java中的所有String实例都采用通用的解码形式;一旦创建String,就无法分辨原始字符编码是什么(或者即使字符串是从编码字节创建的)。

确保XML文档具有指定的字符编码(除非它是UTF-8,否则是必需的)。

答案 1 :(得分:0)

解码发生在InputSourceSAXReader之前)之前(或之前)。从那个班的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);