gpt4 book ai didi

java - 成功编码后无法解码\u0000

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:24:36 24 4
gpt4 key购买 nike

<分区>

我有一个 String contating binary 0 inside in UTF-8 ("A\u0000B")。 JAXB 愉快地编码包含此类字符的 XML 文档,但随后无法解码它:

final JAXBContext jaxbContext = JAXBContext.newInstance(Root.class);
final Marshaller marshaller = jaxbContext.createMarshaller();
final Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

Root root = new Root();
root.value = "A\u0000B";

final ByteArrayOutputStream os = new ByteArrayOutputStream();
marshaller.marshal(root, os);

unmarshaller.unmarshal(new ByteArrayInputStream(os.toByteArray()));

根类很简单:

@XmlRootElement
class Root { @XmlValue String value; }

输出 XML 包含二进制 0 以及 AB 之间(十六进制:41 00 42)这会在解码期间导致以下错误:

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 63; 
An invalid XML character (Unicode: 0x0) was found in the element content of the document.

有趣的是,使用原始 DOM API ( example ) 会产生转义的 0: AB 但尝试读回它会产生类似的错误。此外,任何 XML 解析器或 xmllint 都不允许 0(既不是二进制也不是转义)(另请参阅:Python + Expat: Error on &#0; entities)。

我的问题:

但 Java 中成熟的 XML 堆栈(我使用的是 1.7.0_05)不应该默认或通过一些简单的设置来处理这个问题吗?我正在寻找快速转义、忽略或失败 - 但生成无效 XML 的默认行为是 Not Acceptable 。我相信这样的基本功能不需要在客户端进行任何额外的编码。

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