【Python】文字列とバイト列と16進数文字列
テキストファイルの文字化けをバイナリ(バイト列)で置換する流れ
℃はutf-8で開くとUnicodeEncodeErrorが発生。
どうやらANSI文字らしい。
utf-8で無理やり扱うためにバイナリで開いて文字列を置換した時の覚え書き
バイナリでテキストをread
ファイルストリームをオープンする際のmode='b'で指定可能。
f = open(file, 'rb') b = f.readline() #℃
バイト列 -> 16進数文字列
byte列のメソッド、.hex()で16進数文字列に出力可能。
ここで気を付けるべきは文字列strだということ。
s_hex = b.hex() # => 'b043'
16進数文字列 -> バイト列 -> 文字列
この後コードで文字列を加工する必要があったためいったんutf-8でデコード。
その際はバイト列に戻してから文字列にデコード。
バイト列へはbinasciiモジュールで変換可能。
import binascii s_rep = _binascii.unhexlify(s_hex_rep).decode('utf-8')
バイナリでファイル書き込み
w = open(new_file, 'wb') w.write(b_rep)