首页 > 解决方案 > ASCII 字符读取问题:欧元符号为空

问题描述

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

给我一个错误。我想打印€

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

我的 XML 片段:

<?xml version="1.0" encoding="UTF-8"?>
<company>
    <staff id="1001">
        <firstname>yong</firstname>
        <lastname>mook kim</lastname>
        <nickname>mkyong</nickname>
        <salary>100000</salary>
    </staff>
    <staff id="&#128;">
        <firstname>low</firstname>
        <lastname>yin fong</lastname>
        <nickname>fong fong</nickname>
        <salary>200000</salary>
    </staff>
</company>

标签: javaxmlxsdxml-parsingascii

解决方案


首先,€ 不是一个有效的 ASCII 字符。真正的 ASCII 是一个 7 位字符集,比 € 符号的发明早了 30 多年。

其次,在 LATIN-1 (ISO/IEC 8859-1) 中也没有 €。如果您需要 8 位 ISO/IEC 8859 字符集中的 €,则需要使用 ISO-8859-15。代码是0xA4164十进制。

在 Unicode 中,€ 的代码点是U+20AC. 可以使用十六进制字符实体语法在 XML 中编写;&#x20AC;.

笔记:

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

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


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


(可以在 XML 中使用的字符有限制id,但允许使用 € 字符。)


作为记录,&#128;您尝试在文档中使用的字符实体实际上是指非打印 C1 控制字符。


推荐阅读