Lar*_*rsH 2 xml encoding utf-8 expat-parser
在我的XML输入文件中,我有以下行:
<change beforeWhat="Literacy rate in L2: 50\%–75\%. Informally used" />
Run Code Online (Sandbox Code Playgroud)
在50\%
和之间的那个字符75\%
不是连字符而是短划线.
当我在Python中使用expat解析此XML文件时:
postFixesDoc = minidom.parse('postFixes.xml')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ExpatError: not well-formed (invalid token): line 35, column 99
Run Code Online (Sandbox Code Playgroud)
其中35是我在XML输入文件中引用的行,而99是%
在en dash之前的右列.
如果我用短划线替换–
,那么错误就会消失,一切正常.所以我有一个解决方法.但我不明白为什么会这样.
我读过的关于这个问题的内容 - 例如Python的minidom,xml和非法的unicode字符 - 告诉我,一些UTF-8中合法的字符在XML中是不合法的,并指出了XML的第2.2节法律字符范围的规范.但Char的定义包括范围#x20-#xD7FF
.并且#x2013
该范围内的明显下降.所以有什么问题?
FWIW,XML输入文件以UTF-8声明开头,
<?xml version="1.0" encoding="utf8"?>
Run Code Online (Sandbox Code Playgroud)
我使用十六进制编辑器来验证短划线由字符序列E2 80 93表示,这是用于短划线的正确UTF-8编码.那么为什么不会外籍人士接受呢?这是外籍人士的错误吗?
啊哈...
这个Python文档脚注虽然适用于不同的情况,但提醒我我的XML编码声明是错误的:
XML输出中包含的编码字符串应符合相应的标准.例如,"UTF-8"有效,但"UTF8"不有效.
出于某种原因,我的印象utf8
也是可以接受的.但是当我把声明改为
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
错误消失了!
归档时间: |
|
查看次数: |
1536 次 |
最近记录: |