python-twitterで日本語を使うとUnicodeEncodeError

こんばんは、ころすけ(@wg_koro)です。

pythonロゴ

先日、久々にPython使ってコードを書いていた時のこと。

Twitter検索をしようと思ったんですよ。python-twitterを使って。いざ日本語で検索かけようとすると

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position …(以下省略)
おなじみのエラー
※クリックで画像拡大できます

おい。またお前か orz

ローマ字の検索文言ならOK。けど日本語で検索かけようとすると上記のエラー。検索だけでなく、ツイート投稿など、Twitter APIと通信する部分でエラーになる様子。

Python2.x系でこのエラーは鉄板すぎる・・・。

日本語はURLエンコードしよう

結論から言うと、マルチバイト文字列はURLエンコードすればOK

[python]
import twitter
import socket
import urllib

class TwitterSearch:
def __init__(self):
self._lang = ‘ja’
self._api = twitter.Api(
consumer_key = ‘XXXX’,
consumer_secret = ‘XXXXXXX’,
access_token_key = ‘XXXXXXX’,
access_token_secret = ‘XXXXXXX’
)

def search(self, word, page=1):
#search_word = word # NG
search_word = urllib.quote(word.encode(‘utf-8’)) # OK
result = self._api.GetSearch(term=search_word, page=page, lang=self._lang)
for status in result:
print status.text
print ‘-‘ * 30

if __name__ == ‘__main__’:
word = u’ほげ’

t = TwitterSearch()
t.search(word)
[/python]

実行結果
検索できた

はいおっけー。

うーん、DjangoなどのメジャーフレームワークがPython3に対応してきたし、そろそろ3系を本格的に使うかなぁ。3系であればUnicodeEncode / Decode Errorとおさらばできそうなんだよね。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください