我有一个用UTF-8编码的XML文件。当我用Java打开它时,一些(理论上有效的)字符仍然被编码。例如,我尝试获取𐌰
字符:
String str = new String(line.getBytes("UTF-8"));
System.out.println(str.charAt(pos));
其中pos是它应该的位置。
我得到的是&
字符。
当我用Notepad ++打开它并确保它编码UTF-8时,我遇到了同样的问题。
在我看来,应该有两种方法:从头开始只使用代码(无字符)或用字符替换所有代码。
我该怎么做以及如何做?
答案 0 :(得分:4)
您需要一个合适的XML解析器。您可以为该任务使用一些反序列化框架(如XStream或JAXB),或使用Java提供的DOM解析类:org.w3c.dom
以下是使用org.w3c.dom
包的一些示例:How to read XML file in Java
我的个人偏好是XStream库,但这可能取决于XML文件的复杂性。
答案 1 :(得分:1)
请不要在没有指定字符集的情况下从字节数组构造字符串,这总是一个问题的迹象。
如果charAt
返回&符号,那么您要么不使用xml解析器来加载文件,要么字符是双重编码的,如&66352;
。
字符66352不适合Java的16位字符数据类型,因此被编码为String中的两个代理字符。在这种情况下,您应该使用codePointAt
方法。