11

3つのコンマ区切りの数字を含むファイルを読んでいると仮定します。ファイルは不明なエンコーディングで保存されましたが、これまでのところ、ANSIとUTF-8を扱っています。ファイルがUTF-8にあり、値が115,113,12の1行である場合、次のようになります。

with open(file) as f:
    a,b,c=map(int,f.readline().split(','))

これを投げるだろう:

invalid literal for int() with base 10: '\xef\xbb\xbf115'

最初の数字は常にこれらの'\xef \ xbb\xbf'文字でマングルされます。残りの2つの数値については、変換は正常に機能します。'\ xef \ xbb \ xbf'を''に手動で置き換えてから、int変換を実行すると、機能します。

エンコードされたファイルのタイプに対してこれを行うためのより良い方法はありますか?

4

2 に答える 2

13

表示されているのは、UTF-8 でエンコードされたBOMまたは「バイト オーダー マーク」です。通常、BOM は UTF-8 ファイルには使用されないため、これを処理する最善の方法は、UTF-8 コーデックでファイルを開き、U+FEFF文字が存在する場合はスキップすることです。

于 2010-03-01T23:22:37.530 に答える