【发布时间】:2015-10-30 07:31:20
【问题描述】:
以下代码用于解析 xml 文件。我注意到表情符号字符没有被正确解析。在示例中,输入末尾有一个表情符号(http://www.iemoji.com/view/emoji/693/people/revolving-hearts),该字符在输出中加倍。这是一个已知的错误吗?
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XmlTest {
public static void main(String[] args) {
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setValidating(false);
File file = new File("c:\\temp\\emoji.xml");
try {
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse(file);
NodeList nodes = doc.getElementsByTagName("entry");
Node node = nodes.item(0);
NamedNodeMap map = ((Element)node).getAttributes();
for (int i=0; i<map.getLength(); i++) {
Node n = map.item(i);
System.out.println();
System.out.println(n.getNodeValue());
char[] chars = n.getNodeValue().toCharArray();
for (int j=0; j<chars.length; j++) {
System.out.print(chars[j] + ", " + (int)chars[j] + " ");
}
}
} catch (Exception e) {e.printStackTrace(); }
}
}
这里是输入的 emoji.xml:
<Attributes>
<Map>
<entry key="name" value="????test????"/>
</Map>
</Attributes>
和输出:
name
n, 110 a, 97 m, 109 e, 101
????test????????
?, 55357 ?, 56478 t, 116 e, 101 s, 115 t, 116 ?, 55357 ?, 56478 ?, 55357 ?, 56478
【问题讨论】: