私の 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 は%
en ダッシュの直前の列です。
en ダッシュを に置き換えると–
、エラーはなくなり、すべて正常に動作します。だから私は回避策を持っています。しかし、なぜこれが起こっているのかわかりません。
この問題について私が読んだ内容 (Python のミニダム、xml、および違法な Unicode 文字など) は、UTF-8 で有効な一部の文字が XML では有効でないことを示しており、XML のセクション 2.2 を示しています。有効な文字範囲の仕様。しかし、そこでの Char の定義には range が含まれています#x20-#xD7FF
。そして、#x2013
明らかにその範囲内に収まります。だから問題は何ですか?
FWIW、XML 入力ファイルは UTF-8 宣言で始まり、
<?xml version="1.0" encoding="utf8"?>
そして、16 進エディタを使用して、en ダッシュが文字シーケンス E2 80 93 で表されていることを確認しました。これは、en ダッシュの正しい UTF-8 エンコーディングです。では、なぜ外国人はそれを受け入れないのでしょうか? これはexpatのバグですか?