[英]Java Can't Open a File with Surrogate Unicode Values in the Filename?
[英]Can't Java XMLStreamReader have attribute values with higher Unicode planes?
讓我們創建一個包含兩個屬性值的XML文件,其中包含一個擴展的unicode char
XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(ERROR_XML), "UTF-8"))) {
XMLStreamWriter xmlStreamWriter = outputFactory.createXMLStreamWriter(writer);
xmlStreamWriter.writeStartDocument();
xmlStreamWriter.writeCharacters("\n");
xmlStreamWriter.writeStartElement("start");
xmlStreamWriter.writeAttribute("test1", "1𩸽1");
xmlStreamWriter.writeAttribute("test2", "2𩸽2");
xmlStreamWriter.writeEndElement();
xmlStreamWriter.writeEndDocument();
}
生成的文件如下所示:
<?xml version="1.0" ?>
<start test1="1𩸽1" test2="2𩸽2"></start>
如果再次讀入並檢查屬性值
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(ERROR_XML), "UTF-8"))) {
XMLStreamReader xmlStreamReader = inputFactory.createXMLStreamReader(reader);
xmlStreamReader.nextTag();
if (XMLStreamReader.START_ELEMENT == xmlStreamReader.getEventType() &&
"start".equals(xmlStreamReader.getLocalName()))
{
System.out.println(xmlStreamReader.getAttributeValue(0));
System.out.println(xmlStreamReader.getAttributeValue(1));
}}
這將打印
1𩸽1
2𩸽𩸽2
令人驚訝的是,第二個屬性值包含2次擴展的unicode char!
以下任何使用擴展char作為屬性值都會增加此計數。 在一個案例中,我收到了12000個相同字符的屬性值,而不是一個。 這里發生了什么?
Java API對應的類中存在一個錯誤。
您可以使用“woodstox.jar”正確執行此操作。 您需要做的就是修改讀取XML文件的代碼,如下所示:
它會正常工作。 我測試了自己。
您可以在http://wiki.fasterxml.com/WoodstoxDownload中找到“woodstox.jar”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.