unicode と str の文字コードあたりの整理

文字コードをとても詳しく、かつ分かりやすく解説していたページを参考に、備忘録メモ。
まだまだ理解不足なところもあるので、間違いあればご指摘いただけると大変嬉しいです!(笑)

「あ」で考える

$ import types
$ type('あ')
$ type(unichr(12345))
$ type(u'\u3042')
type str
type unicode
type unicode


  • 標準出力する場合は、文字コードでないと文字化けまたはエラーとなる
  • str と unicode は encode, decode で変換できる
  • str.decode() -> unicode
  • unicode.encode() -> str
$ str = 'あ'
$ str.decode('utf-8')

$ type(str.decode('utf-8')

$ unichr(12345).encode('utf-8')

$ type(unichr(12345).encode('utf-8'))



また、標準出力で考えると、

  • sys.stdout.write(unicode) だとエラーとなる
  • 上の unicode は encode() で str にする必要がある
$ sys.stdout.write(unichr(12345))  # type(unichr(12345)) = unicode
'ascii' codec can't encode chracter ...
$ sys.stdout.write(unichr(12345).encode('utf-8')) # type(unichr(12345).encode('utf-8')) = str
''

う〜ん。日本語って難しいな笑