読者です 読者をやめる 読者になる 読者になる

YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

nkfやiconvがなくても文字変換できるよ

Python

はじめに

こんにちは、Python界の情弱です。明日(日付的には今日)iPhone 4S買うからちょっと浮かれてます。某Skypeチャットで「Unicodeが\uXX\uYYみたいなまま保存されたテキストファイルの処理ができない!」っていう話題があって、ちょうど前に調べたので回答したら意外と反響あったのでここにもメモっておきます。

Unicode文字列しかないファイルをdecodeするとき

たとえばこんなファイルだった場合。

  • hoge.txt
\u3068\u3093\u3077\u30fc

こうすればいいです。

fp = open('hoge.txt','rb')
data = fp.read()
print data.decode('unicode-escape')

これでできた。

$ python convert.py
とんぷー

ちなみに対応しているエンコーディング一覧はここ。思いつくのはたぶん大抵載ってる。

というか

タイトルの話なんですが、そのままです。「Pythonでのマルチバイト文字の扱いがわからない」って声を聞く度に心を痛めるのですが、Pythonはかなりマルチバイト文字の処理に関しては優秀だと思います。nkfやiconvより便利だったりすることもあります。

(外)エンコーディングされた文字列 <---> (内)PythonでのUnicode

なんでもいいんですけど、たとえばPython 2.xだとしたら

  • 外からもらってくるデータは内部処理するときはdecodeしてUnicodeにしてから使う
  • 内部でUnicodeとして持ってた文字列は外部にはencodeして渡す
  • unicodeとstrは直接連結しない

ってやってればまず間違えません。