Python.expatが悪いの記号を使用してXMLファイルを解析することはできません。どのように周りに行きますか?

StackOverflow https://stackoverflow.com/questions/2495538

質問

私はexpatのでXMLファイル(OSMデータ)を解析しようとしている、とexpatのは解析できないことを、いくつかのUnicode文字を持つ行がある。

<tag k="name"
v="абвгдежзиклмнопр�?туфхцчшщьыъ�?ю�?�?БВГДЕЖЗИКЛМ�?ОПРСТУФХЦЧШЩЬЫЪЭЮЯ" />

<tag k="name" v="Cin\x8e? Rex" />

(開口ラインにコードXMLファイルは "UTF-8" である)

は、ファイルはかなり古く、エラーがあったに違いありません。近代的なファイルでは、私はUTF-8エラーが表示されていない、と彼らは罰金を解析されます。しかし、私のプログラムが壊れたシンボルを満たしている場合にはどのような、どのような回避策は私がすることができますか?それは、BZ2コーデックが壊れた文字を無視すると、UTF-8コーデック(私は圧縮されたファイルを解析)に参加、またはそれらを「?」に変更することは可能ですか?

役に立ちましたか?

解決

わからない文字がここにコピー&ペースト文字列によって導入された「」場合には、 しかし、あなたは、元のデータでそれらを持っている場合、発電機のようです \ uFFFDの別文字を導入問題:

」とは、その値が不明またはで入ってくる文字を置き換えるために使用 ユニコードで表現できない "

からcitied: http://www.fileformat.info/info/unicode/char/ FFFD / index.htmをする

回避策?拡張のためだけのアイデアます:

good = True
buf = None
while True:
if good:
        buf = f.read(buf_size)
        else:
        # try again with cleaned buffer
        pass
        try:
            xp.Parse(buf, len(buf) == 0)
            if (len(buf) == 0):
                    break
        good = True
    except ExpatError:
        if xp.ErrorCode  == XML_ERROR_BAD_CHAR_REF:
            # look at ErrorByteIndex (or nearby)
            # for 0xEF 0xBF 0xBD (UTF8 replacement char) and remove it
            good = False
        else:
            # other errors processing
            pass

またはクリーン入力代わり+コーナーケース(バッファ端部分配列)をバッファ。 Pythonのexpatのは、割り当てカスタムエラーハンドラに許可する場合、私は思い出すことができません。 それは簡単に次のようになります。

は文字「」iからきれいなあなたのサンプル場合は、[OK]を処理しています。 \ XD1は失敗しません。

OSMデータ?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top