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

时间:2019-02-25 12:07:03

标签: java xml xsd xml-parsing 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>

2 个答案:

答案 0 :(得分:4)

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

接下来,€在LATIN-1(ISO / IEC 8859-1)中也不存在。如果需要8位ISO / IEC 8859字符集中的€,则需要使用ISO-8859-15。代码是0xA4或十进制164

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

注意:

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

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


最后,由于您已将UTF-8指定为XML文档的编码,因此应该能够将原义的€字符粘贴到文档中...假设您使用一个支持UTF-8的编辑器。 (但这也有缺点...)


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


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

答案 1 :(得分:1)

嗨,Shreya

我认为您的xml版本可能使用了错误的十六进制字符。 尝试&#x20AC;&#8364;。 以下链接上有一长串文字,基本上描述了您的确切问题!

Link to solve all your problems:)

祝你好运!

Jesper