私はProject Gutenbergからダウンロードした大きな文字列を持っています。私はそれを私のコンピュータに保存しようとしていますが、UnicodeEncodeErrorを取得しています。それを修正する方法や無視する方法がわかりません。私は、ファイルの先頭にBOMを削除しようとした、utf8ファイルを保存するときにUnicodeEncodeErrorを無視する
UnicodeEncodeError: 'charmap' codec can't encode character '\ufeff' in position 0: character maps to <undefined>
まず:
from urllib import request
# Get the text
response = request.urlopen('http://www.gutenberg.org/files/2701/2701-0.txt')
# Decode it using utf8
raw = response.read().decode('utf8')
# Save the file
file = open('corpora/canon_texts/' + 'test', 'w')
file.write(raw)
file.close()
これは私に次のエラーを与える
# We have to get rid of the pesky Byte Order Mark before we save it
raw = raw.replace(u'\ufeff', '')
が、私は同じエラーを取得し、別のポジション番号でちょうど:
UnicodeEncodeError: 'charmap' codec can't encode characters in position 7863-7864: character maps to <undefined>
私はその地域で見れば、私は問題の文字を見つけることができないので、私は削除するかわからない:
raw[7850:7900]
だけ出力します:
ようには見えません' BALLENA, Spanish.\r\n PEKEE-NUEE-'
をそれは問題になるでしょう。
file = open('corpora/canon_texts/' + 'test', 'w')
try:
file.write(raw)
except UnicodeEncodeError:
pass
file.close()
をしかし、これは私に0サイズのファイルを与え、テキスト全体をスキップ:
だから、私はtry文で悪い行をスキップしようとしました。
どうすればこの問題を解決できますか?
EDIT:
カップルの人は、 '\のufeffは' UTF-16であることを指摘しています。
# Get the text
response = request.urlopen('http://www.gutenberg.org/files/2701/2701-0.txt')
# Decode it using utf16
raw = response.read().decode('utf-16')
しかし、私はこのエラーを取得する前に、私もデータをダウンロードすることはできません:私は、UTF-16への切り替えを試みた
UnicodeDecodeError: 'utf-16-le' codec can't decode byte 0x0a in position 1276798: truncated data
SECOND EDITを:
私もUTF-8でデコードしてみましたそれはBOMが含まれているためu'\ufeff' in Python stringで提案されているように-sigが、私はそれを保存しようとすると、私は戻って、このエラーによ:
UnicodeEncodeError: 'charmap' codec can't encode characters in position 7863-7864: character maps to <undefined>
「\ ufeff」はutf-16のBOMであり、あなたはutf-8としてデコードしようとしています。 – TemporalWolf
可能性のある[u '\ ufeff' in Python string](http://stackoverflow.com/questions/17912307/u-ufeff-in-python-string) – TemporalWolf
例外の原因となっている文字を確認するには、 'ascii(raw [7850:7900])'を試してください。標準の 'repr()'形式では見えない、珍しい空白文字やソフトハイフンなどがあるかもしれません。 – lenz