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 MongoDBとScrapyは相性が悪い。 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)。変換処理について知りたい人はこちらが参考になるかも