Program
python-twitterで日本語を使うとUnicodeEncodeError
こんばんは、ころすけ(@wg_koro)です。
先日、久々にPython使ってコードを書いていた時のこと。
Twitter検索をしようと思ったんですよ。python-twitterを使って。いざ日本語で検索かけようとすると
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position …(以下省略)
※クリックで画像拡大できます
おい。またお前か orz
ローマ字の検索文言ならOK。けど日本語で検索かけようとすると上記のエラー。検索だけでなく、ツイート投稿など、Twitter APIと通信する部分でエラーになる様子。
Python2.x系でこのエラーは鉄板すぎる・・・。
日本語はURLエンコードしよう
結論から言うと、マルチバイト文字列はURLエンコードすればOK。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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) |
はいおっけー。
うーん、DjangoなどのメジャーフレームワークがPython3に対応してきたし、そろそろ3系を本格的に使うかなぁ。3系であればUnicodeEncode / Decode Errorとおさらばできそうなんだよね。
関連記事
2013年05月14日 | Posted in Program | No Comments »
コメントを残す