ichou1のブログ

主に音声認識、時々、データ分析のことを書く

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関数を使えばよい。

標準出力のエンコード形式は"UTF-8"であるとする。

(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の向きについては、一瞬迷う時があるのでメモしておく。

f:id:ichou1:20190202104539p:plain