gpt4 book ai didi

java - 解析 XML 文档中的非 ASCII 字符

转载 作者:行者123 更新时间:2023-11-29 05:58:22 25 4
gpt4 key购买 nike

我正在尝试使用 SAX 解析器解析此 XML 文档:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE WIN_TPBOUND_MESSAGES SYSTEM "tpbound_messages_v1.dtd">
<WIN_TPBOUND_MESSAGES>
<SMSTOTP>
<SOURCE_ADDR>+447522579247</SOURCE_ADDR>
<TEXT>TEST: @£$¥èéùìò?ØøÅå&amp; ^{}\\[~]¡&#8364;ÆæßÉ!\"#¤%'()*+,-./0123456789:;&lt;=&gt;? ÄÖÑܧ¿äöñüà end</TEXT>
<WINTRANSACTIONID>652193268</WINTRANSACTIONID>
</SMSTOTP>
</WIN_TPBOUND_MESSAGES>

解析<TEXT>元素后,内容转换为:

TEST: @£$¥èéùìò?Ã�øÃ�Ã¥& ^{}\\[~]¡€Ã�æÃ�Ã�!\"#¤%'()*+,-./0123456789:;<=>? Ã�Ã�Ã�Ã�§¿äöñüà end

很明显,非 ASCII 字符发生了一些不好的事情。解析 XML 的代码如下所示:

public void parse(InputStream xmlStream) throws WinGatewayException {
XMLReader parser = XMLReaderFactory.createXMLReader("org.apache.xerces.parsers.SAXParser");
parser.setContentHandler(this);
parser.setErrorHandler(error);
parser.setEntityResolver(new DTDResolver());
parser.setDTDHandler(this);
parser.setFeature("http://xml.org/sax/features/validation", true);
parser.setFeature("http://apache.org/xml/features/validation/schema", true);
parser.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar", true);
parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
parser.setFeature("http://apache.org/xml/features/continue-after-fatal-error", false);
parser.parse(new InputSource(xmlStream));
}

并且this引用的对象有如下方法:

public void endElement(String uri, String localName, String qName)
throws SAXException {

if (localName.equals("TEXT")) {
logger.debug("Parsed message text: " + cData.toString());
message.setText(cData.toString());
}
}

为什么 XML 解析器不保留这些非 ASCII 字符?

最佳答案

我相信您的 XML 文件实际上是 UTF-8 而不是 ISO-8859-1。

ISO-8859-1 编码文件的每个字符只有一个字节,因此英磅符号将是一个字节 0xA3。但是,看起来您的文件有 0xC2 0xA3,这是您在 UTF-8 中为 U+00A3 获得的字节序列。

更改 XML 声明以反射(reflect)这一点:

<?xml version="1.0" encoding="UTF-8"?>

看看是否能解决问题。假设确实如此,那么您需要找出产生这些不良数据的原因。

关于java - 解析 XML 文档中的非 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11136419/

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