EncoceとDecodeに関するメモ
マルチバイト文字の扱いに関するメモ。
UTF-8として保存されたファイルがあったとする。
% file /tmp/hoge.txt /tmp/hoge.txt: UTF-8 Unicode text
これをpythonのコードで読み込む。
with codecs.open('/tmp/hoge.txt', 'r', encoding='utf-8') as f: lines = f.read().split('\n') for line in lines: ...
ここで、"line"には"行"という漢字が入っていたとして、pdbで表示させるとUnicode形式で表示される。
(pdbのバージョンは「2.7」)
(Pdb) p line u'\u884c' (Pdb) isinstance(line, unicode) True
日本語で表示させるには、pdbのprintコマンドではなく、pythonのprint関数を使えばよい。
(Pdb) print sys.stdout.encoding UTF-8
Unicode型
(Pdb) isinstance(line, unicode) True (Pdb) print(line) 行
文字列型
(Pdb) isinstance(line.encode('utf-8'), str) True (Pdb) print(line.encode('utf-8')) 行 (Pdb) p line.encode('utf-8') '\xe8\xa1\x8c'
encodeとdecodeの向きについては、一瞬迷う時があるのでメモしておく。
Unihan Database
http://www.unicode.org/cgi-bin/GetUnihanData.pl?codepoint=884c