この問題については、ウェブ上で多くのトピックがありますが、私の特定のケースに対する答えが見つからないようです。
私はCSVファイルを持っています。何が行われたかはわかりませんが、開こうとすると、次のようになります。
UnicodeDecodeError: 'utf8' コーデックは位置 0 のバイト 0xff をデコードできません: 無効な開始バイト
ここに完全がありTraceback
ます:
Traceback (most recent call last):
File "keywords.py", line 31, in <module>
main()
File "keywords.py", line 28, in main
get_csv(file_full_path)
File "keywords.py", line 19, in get_csv
for row in reader:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5a07' in position 10: ordinal not in range(128)
Stack Overflow の助けを借りて、次のように開きました。
reader = csv.reader(codecs.open(file_full_path, 'rU', 'UTF-16'), delimiter='\t', quotechar='"')
今問題は、私がファイルを読んでいるときです:
def get_csv(file_full_path):
import csv, codecs
reader = csv.reader(codecs.open(file_full_path, 'rU', 'UTF-16'), delimiter='\t', quotechar='"')
for row in reader:
print row
私はアジアのシンボルで立ち往生しています:
UnicodeEncodeError: 'ascii' コーデックは位置 10 の文字 u'\u5a07' をエンコードできません: 序数が範囲外です(128)
decode
その文字を含む文字列に対して 'encode'を試みunicode()
ましたが、役に立たないようです。
for row in reader:
#decoded_row = [element_s.decode('UTF-8') for element_s in row]
#print decoded_row
encoded_row = [element_s.encode('UTF-8') for element_s in row]
print encoded_row
この時点で、その理由がよくわかりません。もし私が
>>> print u'\u5a07'
娇
また
>>> print '娇'
娇
できます。ターミナルでも動作します。ターミナルと Python シェルのデフォルトのエンコーディングを確認しました。どこでも UTF-8 です。そして、そのシンボルを簡単に印刷します。codecs
UTF-16を使用してファイルを開くことに関係があると思います。
ここからどこへ行けばいいのかわからない。誰か助けてくれませんか?