有什么方法可以将由dom4jUTF-8解析的文档从SAXReader -8859-2编码转换成UTF-8?我需要在解析时发生这种情况,以便dom4j创建的对象已经是Unicode/UTF-8,并运行如下代码:
"some text".equals(node.getText());
返回true。
发布于 2009-06-11 08:45:33
这是由dom4j自动完成的。Java语言中的所有String
实例都是一种通用的解码形式;一旦创建了String
,就不可能知道原始字符编码是什么(或者即使字符串是从编码的字节中创建的)。
只需确保XML文档具有指定的字符编码(这是必需的,除非它是UTF-8)。
发布于 2009-06-11 08:50:01
解码发生在InputSource
中(或之前)(在SAXReader
之前)。来自该类的javadoc:
XML解析器将使用InputSource对象来确定如何读取
输入。如果有可用的字符流,解析器将直接读取该流,而不考虑在该流中找到的任何文本编码声明。如果没有字符流,但有字节流,解析器将使用该字节流,使用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);
https://stackoverflow.com/questions/982160
复制