ikeikeikeike's unk blog.

http://github-awards.com/users/ikeikeikeike

Macの濁点問題を解決するPython unicodedataモジュール

日本語のURLを使いたいんです

最近Scrapyで採取したゴミMongoDB※1(笑) に入れておき、その後TinkererでブログにしてS3へアップロードする一連のスクリプトを書いて、ゴミサイトを何個も作りまくってるんですけど

Tinkererで生成したtag list, tag cloudにUnicode文字も含めるカスタマイズをしたのですが、その後頻繁にS3で404が発生する現象が起きていたので調べていたのです、そしたらなにやらUTF-8関連のきな臭い問題のようでした

UTF-8-MAC

使用している環境がMacなものでUTF-8-MAC問題が発生していました。 (この問題についてはこちらを参照)

説明は省きますが修正するにはUTF-8-MACからUTF-8に変換すれば良いみたいです。普通この際iconvを使うのが一般的思いますが今回は一連のゴミ採集スクリプトの言語がPythonなのでPythonでやりたいと思います

unicodedataモジュール

unicodedataモジュールに変換処理のめんどうをみてもらうことにする※2

例えばゴミって単語をUTF-8-MACからUTF-8へ変換する場合

import unicodedata
unicodedata.normalize('NFC', u'ゴミ')

この処理を施した文字列をboto.s3に直接渡すことで問題なくS3上でゴミタグを表示できた

(∩´∀`)∩ワーイ

脚注

※1 MongoDBScrapyは相性が悪い。 http://blog.scrapinghub.com/2013/05/13/mongo-bad-for-scraped-data/ (というか全般的なMongoDBへの評価ですね)

※2 unicodedataモジュールはUnicodeData.txtの対応表を元に変換処理をしてくれるようだ、Versionは5.2.0(UnicodeData File Format 5.2.0)。変換処理について知りたい人はこちらが参考になるかも