最近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()するのがいいと思われる。

コメントを残す