ASCII 字符读取问题:欧元符号为空

shr*_*eya 3 java xml xsd ascii xml-parsing

我如何从xml文件读取€\xcd\xbe到java

\n\n

给我一个错误。我想要打印 \xe2\x82\xac

\n\n
org.xml.sax.SAXParseException; systemId: file:/C:/Users/stikkoo/Desktop/product.xml; lineNumber: 9; columnNumber: 18; The character reference must end with the \';\' delimiter.\n    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:257)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的 XML 片段:

\n\n
<?xml version="1.0" encoding="UTF-8"?>\n<company>\n    <staff id="1001">\n        <firstname>yong</firstname>\n        <lastname>mook kim</lastname>\n        <nickname>mkyong</nickname>\n        <salary>100000</salary>\n    </staff>\n    <staff id="&#128\xcd\xbe">\n        <firstname>low</firstname>\n        <lastname>yin fong</lastname>\n        <nickname>fong fong</nickname>\n        <salary>200000</salary>\n    </staff>\n</company>\n
Run Code Online (Sandbox Code Playgroud)\n

Ste*_*n C 5

首先,\xe2\x82\xac 不是有效的 ASCII 字符。Real ASCII 是一种 7 位字符集,比 \xe2\x82\xac 符号的发明早了 30 多年。

\n\n

接下来,\xe2\x82\xac 也不存在于 LATIN-1 (ISO/IEC 8859-1) 中。如果需要 8 位 ISO/IEC 8859 字符集中的 \xe2\x82\xac,则需要使用 ISO-8859-15。代码为0xA4164十进制。

\n\n

在 Unicode 中,\xe2\x82\xac 的代码点是U+20AC。可以使用十六进制字符实体语法以 XML 形式编写;&#x20AC;

\n\n

笔记:

\n\n
    \n
  • 十六进制数字不区分大小写。
  • \n
  • 您还可以使用十进制字符实体语法;&#8364;,但我更喜欢十六进制形式,因为它更符合 Unicode 代码表。
  • \n
\n\n

或者,您可以使用 XML / HTML 命名字符实体&euro;...假设您的 XML 解析器能够理解它。

\n\n
\n\n

最后,由于您已指定 UTF-8 作为 XML 文档的编码,因此您应该能够将文字 \xe2\x82\xac 字符粘贴到文档中...假设您正在使用支持 UTF-8 的编辑器进行编辑编辑。(但这也有缺点......)

\n\n
\n\n

(可在 XML 中使用的字符有限制id,但允许使用 \xe2\x82\xac 字符。)

\n\n
\n\n

郑重声明,&#128;您尝试在文档中使用的字符实体实际上是指非打印 C1 控制字符。

\n

  • 是的。我推荐使用十六进制形式,因为这是 Unicode 标准的首选表示法。 (3认同)