web-dev-qa-db-ja.com

UnicodeEncodeError: 'ascii'コーデックは、位置6の文字u '\ u2019'をエンコードできません:序数が範囲(128)にありません

トリップアドバイザーからアムステルダムの500軒のレストランのリストを取得しようとしています。しかし、308番目のレストランの後、次のエラーが発生します。

Traceback (most recent call last):
  File "C:/Users/dtrinh/PycharmProjects/TripAdvisorData/LinkPull-HK.py", line 43, in <module>
    writer.writerow(rest_array)
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2019' in position 6: ordinal not in range(128)

StackOverflowで見つけたものをいくつか試しましたが、現時点では何も機能していません。誰かが私のコードを見て、素晴らしいと思われる解決策を見つけることができるかどうか疑問に思っていました。

        for item in soup2.findAll('div', attrs={'class', 'title'}):
            if 'Cuisine' in item.text:
                item.text.strip()
                content = item.findNext('div', attrs=('class', 'content'))
                cuisine_type = content.text.encode('utf8', 'ignore').strip().split(r'\xa0')
        rest_array = [account_name, rest_address, postcode, phonenumber, cuisine_type]
        #print rest_array
        with open('ListingsPull-Amsterdam.csv', 'a') as file:
                writer = csv.writer(file)
                writer.writerow(rest_array)
    break
8
dtrinh

_rest_array_には、Unicode文字列が含まれています。 _csv.writer_を使用して行を書き込む場合、バイト文字列をシリアル化する必要があります(Python 2.7)。

「utf8」エンコーディングを使用することをお勧めします。

_with open('ListingsPull-Amsterdam.csv', mode='a') as fd:
    writer = csv.writer(fd)
    rest_array = [text.encode("utf8") for text in rest_array]
    writer.writerow(rest_array)
_

注:組み込み関数file()open()関数のエイリアス)をシャドウするため、変数としてfileを使用しないでください。

このCSVファイルをMicrosoft Excelで開く場合は、「cp1252」などの別のエンコーディングを使用することを検討してください(u "\ u2019"文字を使用できます)。

13
Laurent LAPORTE

ASCII以外の文字をcsv出力ファイルに書き込んでいます。文字をエンコードできる適切な文字エンコードで出力ファイルを開いていることを確認してください。多くの場合、安全な賭けはUTF-8です。これを試して:

with open('ListingsPull-Amsterdam.csv', 'a', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(rest_array)

編集これはPython 3.x用です。申し訳ありません。

4
Irmen de Jong