有什么方法可以将dom4j的SAXReader解析的文件从ISO-8859-2编码转换为UTF-8?我需要在解析时发生这种情况,以便dom4j创建的对象已经是Unicode / UTF-8并运行如下代码:
"some text".equals(node.getText());
返回true。
答案 0 :(得分:2)
这是由dom4j自动完成的。 Java中的所有String
实例都采用通用的解码形式;一旦创建String
,就无法分辨原始字符编码是什么(或者即使字符串是从编码字节创建的)。
确保XML文档具有指定的字符编码(除非它是UTF-8,否则是必需的)。
答案 1 :(得分:0)
解码发生在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);