在我的 XML 输入文件中,我有以下行:
<change beforeWhat="Literacy rate in L2: 50\%–75\%. Informally used" />
50\%
和 75\%
之间的字符不是连字符而是 en dash .
当我在 Python 中使用 expat 解析此 XML 文件时:
postFixesDoc = minidom.parse('postFixes.xml')
我收到以下错误:
ExpatError: not well-formed (invalid token): line 35, column 99
其中 35 是我在上面从 XML 输入文件中引用的行,99 是破折号之前 %
的列。
如果我用 –
替换破折号,那么错误就会消失,一切正常。
所以我有一个解决方法。但我不明白为什么会这样。
我读到的关于这个问题的内容——例如Python’s minidom, xml, and illegal unicode characters -- 告诉我一些在 UTF-8 中合法的字符在 XML 中不合法,并指向我 section 2.2 of the XML Spec关于合法的字符范围。但是 Char 的定义包括 #x20-#xD7FF
范围。而 #x2013
显然属于这个范围。那有什么问题呢?
FWIW,XML 输入文件以 UTF-8 声明开头,
<?xml version="1.0" encoding="utf8"?>
并且我使用十六进制编辑器验证破折号是否由字符序列 E2 80 93 表示,即 correct UTF-8 encoding对于破折号。那么为什么外籍人士不接受呢?这是外籍人士的错误吗?
最佳答案
啊哈...
This Python doc footnote ,虽然它适用于不同的情况,但提醒我我的 XML 编码声明是错误的:
The encoding string included in XML output should conform to the appropriate standards. For example, “UTF-8” is valid, but “UTF8” is not.
出于某种原因,我的印象是 utf8
也可以接受。但是当我将声明更改为
<?xml version="1.0" encoding="utf-8"?>
错误消失了!
关于xml - 为什么外籍人士拒绝破折号字符无效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20526523/