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