有効なUTF-8であるはずのデータファイルを処理していますが、そうではないため、パーサー(私の制御下にない)が失敗します。 UTF-8整形式のデータを事前検証する段階を追加したいのですが、これを支援するユーティリティはまだ見つかりません。
W3Cには web service があり、死んでいるように見えます。Windowsのみの検証が見つかりました tool 無効なUTF-8ファイルを報告しますが、どの修正する行/文字。
立ち寄って使用できるツール(理想的にはクロスプラットフォーム)、またはデータの読み込みプロセスの一部にできるRuby/Perlスクリプトのいずれかに満足します。
GNU iconv:
$ iconv -f UTF-8 your_file -o /dev/null; echo $?
または、macOSなどの古いバージョンのiconvの場合:
$ iconv -f UTF-8 your_file > /dev/null; echo $?
ファイルが正常に変換された場合、コマンドは0を返し、そうでない場合は1を返します。さらに、無効なバイトシーケンスが発生したバイトオフセットを出力します。
編集:出力エンコーディングを指定する必要はありません。UTF-8であると想定されます。
pythonおよびstr.encode | decode関数を使用します。
>>> a="γεια"
>>> a
'\xce\xb3\xce\xb5\xce\xb9\xce\xb1'
>>> b='\xce\xb3\xce\xb5\xce\xb9\xff\xb1' # note second-to-last char changed
>>> print b.decode("utf_8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.5/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 6: unexpected code byte
スローされた例外には、その.argsプロパティで要求された情報があります。
>>> try: print b.decode("utf_8")
... except UnicodeDecodeError, exc: pass
...
>>> exc
UnicodeDecodeError('utf8', '\xce\xb3\xce\xb5\xce\xb9\xff\xb1', 6, 7, 'unexpected code byte')
>>> exc.args
('utf8', '\xce\xb3\xce\xb5\xce\xb9\xff\xb1', 6, 7, 'unexpected code byte')