Следующий код используется для анализа XML-файла. Я заметил, что символ эможи не обрабатывается правильно. В примере вход имеет один emoji в конце (http://www.iemoji.com/view/emoji/693/people/revolving-hearts), символ удваивается на выходе. Это известная ошибка?java xml parser with emoji character
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
Забавно, я написал, что тестовый код, написанный в первом посте, и передал его одного из наших клиентов , Я открыл запрос на обслуживание для JVM Oracle для этой проблемы. Номер Oracle SR: 3-11255842301 Oracle номер дефекта: 21694036 – Zman777
Любое обходное решение для этого? – Manny