[文字コード] UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 [Python]

Python のプログラムを対話モードで実行すると UnicodeDecodeError が発生して解決した方法をご紹介します。

Python

具体的には下記のサイトで書かれていた内容に沿ってスクリプト実行したときに UnicodeDecodeError が発生した話です。

amazon.py を使って ”Amazonクラスを使って「人工知能」というキーワードで本を検索してみます。” 以下のプログラムを実行すると下記のエラーが返ってきました。

xml = amazon.itemSearch("Books", Keywords="人工知能", ItemPage="1")  # 本

エラー内容

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "amazon.py", line 44, in itemSearch
    return self.sendRequest(params)
  File "amazon.py", line 76, in sendRequest
    self.url = self.buildURL(params)
  File "amazon.py", line 58, in buildURL
    pair = "%s=%s" % (p[0], urllib2.quote(p[1].encode("utf-8")))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

エラーの原因を調べてみると、文字コードの扱いについてのエラーでした。

UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position 0: ordinal not in range(128)

ここを読んで解決しました。unicode の扱いが詳しく書かれていて勉強になりました。

下記のように Keywords=u”人工知能” と Keywords を Unicode 型にしてあげると正常に動作しました。

xml = amazon.itemSearch("Books", Keywords=u"人工知能", ItemPage="1")

以上です。