feedly hatebu line pocket facebook twitter rss github pinterest muku

文字コード

最近pythonの文字コードをようやく掴みかけてるのでφ(..)メモメモ。

まず、pythonではunicode文字列byte列というものがあり、それぞれの型はstr型bytes型

一般に、普通の文書で使われるのはbyte列であり、utf-8とかshift-jisとかeuc-jpとかus-asciiとかcp932とかがある。
一方、通常パイソンのコードの中で使用されるのはunicode文字列

例えばlen関数を使ったときに、unicode文字列だとふつうの文字数が返ってくるけど、byte列だとバイト数が返ってくる。
またbytesとstrは結合できないので、encode()かdecode()してくっつける。

コードの中でunicode文字列かbyte列かを指定する方法はpython2とpython3では異なっていて、

python2ではu’ほにゃらら’でunicode文字列を指定し、’ほにゃらら’でbyte列を指定する。
python3では’ほにゃらら’でunicode文字列を指定し、b’\xe3\x81\xbb\xe3\x81\xab\xe3\x82\x83\xe3\x82\x89\xe3\x82\x89’でbyte列を指定する。

また、ファイルへの出力の場合byte列で与えなければならないし、標準出力の場合はunicode文字列で与えなければならない。
たとえばsys.stdoutをファイルへ振り替えてprint()関数で送ると望まない形で保存される。

‘ユニコード文字列’.encode(‘utf-8′)でutf-8のbyte列に変換。
b’utf-8のバイト列’.decode(‘utf-8’)でunicode文字列へ変換できる。

また、encode()とdecode()は引数を省略したときにデフォルトではutf-8を使うようだが、他の関数ではデフォルトでus-asciiを使う場合などもあるので、省略しない方がいいかも。

うまくまとまってないけど、python3の場合、コード中では極力unicodeを扱い、出力など必要な時にencode()するのがいいと思われる。

このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。

スポンサーリンク

最近の投稿

カテゴリー

最近のコメント

スポンサーリンク