gpt4 book ai didi

Java XMLReader 不清除多字节 UTF-8 编码属性

转载 作者:搜寻专家 更新时间:2023-11-01 00:52:57 24 4
gpt4 key购买 nike

我遇到了一个非常奇怪的情况,我的 SAX ContentHandler 被 XMLReader 传递了错误的属性。正在解析的文档是 UTF-8,在 XML 属性中包含多字节字符。似乎发生的是每次调用我的处理程序时都会累积这些属性。因此,它们不是连续传递,而是连接到前一个节点的值上。

这是一个使用公共(public)数据(维基百科)演示这一点的示例。

public class MyContentHandler extends org.xml.sax.helpers.DefaultHandler {

public static void main(String[] args) {
try {
org.xml.sax.XMLReader reader = org.xml.sax.helpers.XMLReaderFactory.createXMLReader();
reader.setContentHandler(new MyContentHandler());
reader.parse("http://en.wikipedia.org/w/api.php?format=xml&action=query&list=allpages&apfilterredir=redirects&apdir=descending");

} catch (Exception ex) {
ex.printStackTrace();
}
}

public void startElement(String uri, String localName, String qName, org.xml.sax.Attributes attributes) {
if ("p".equals(qName)) {
String title = attributes.getValue("title");
System.out.println(title);
}
}
}

更新:这个完整的例子产生了(对于粗俗的输出向所有讲粤语的人道歉):

𩧢
𩧢𨳒
𩧢𨳒🛅
𩧢𨳒🛅🛄
𩧢𨳒🛅🛄🛃
𩧢𨳒🛅🛄🛃🛂
𩧢𨳒🛅🛄🛃🛂🛁
𩧢𨳒🛅🛄🛃🛂🛁🛀
𩧢𨳒🛅🛄🛃🛂🛁🛀🚿
𩧢𨳒🛅🛄🛃🛂🛁🛀🚿🚾

有没有人知道发生了什么以及如何解决它?文档中返回的内容与我通过此代码段进行调试时发生的情况不符。

最佳答案

似乎是包含 JRE 的 Xerces 版本 (com.sun.org.apache.xerces.internal.parsers.SAXParser) 中的错误。以下是我的笔记。

与 JRE 1.6.0_24 捆绑的版本v2.4.0 , v2.5.0 , v2.6.0 属性的积累。

Xerces-J v1.4.4 没有似乎有错误。

Xerces2-J v2.6.1 , v2.6.2 , v2.9.0 , 2.11.0 没有似乎有错误。

您可以通过测试的版本看出我将版本历史一分为二。好像是什么东西fixed between v2.6.0 and v2.6.1 .我有点惊讶 JRE 没有更新,因为它在大约 7 年前已在主要 Xerces 中修复!

关于Java XMLReader 不清除多字节 UTF-8 编码属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5626978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com