在我的 XML 输入文件中,我有以下行:
<change beforeWhat="Literacy rate in L2: 50\%–75\%. Informally used" />
50\%
和之间的那个字符75\%
不是连字符而是破折号。
当我在 Python 中使用 expat 解析这个 XML 文件时:
postFixesDoc = minidom.parse('postFixes.xml')
我收到以下错误:
ExpatError: not well-formed (invalid token): line 35, column 99
其中 35 是我在上面从 XML 输入文件中引用的行,而 99 是%
右破折号之前的列。
如果我用 替换破折号–
,则错误消失并且一切正常。所以我有一个解决方法。但我不明白为什么会这样。
我读到的关于这个问题的内容——例如Python 的 minidom、xml 和非法 unicode 字符——告诉我一些在 UTF-8 中合法的字符在 XML 中是不合法的,并指出我的第 2.2 节 XML规范合法字符范围。但是 Char 的定义包括 range #x20-#xD7FF
。并且#x2013
显然属于这个范围。所以有什么问题?
FWIW,XML 输入文件以 UTF-8 声明开头,
<?xml version="1.0" encoding="utf8"?>
我使用十六进制编辑器验证短划线是否由字符序列 E2 80 93 表示,这是短划线的正确 UTF-8 编码。那么为什么外国人不接受呢?这是外籍人士的错误吗?