Python3の文字列(ユニコード)とバイト列

    文字列str(unicode(point))
decode↑ ↓encode
    バイト列bytes(utf-8, latin-1, cp932, etc...)

HOWTOに載ってるTips

“最も重要なTipsは
ソフトウェア内の処理ではUniucode文字列のみ使用すること、インプットデータを出来るだけ早くデコードすること、そして、アウトプット時のみエンコードを指定すること”

同じHOWTOに載ってるサンプル
入出力時のみエンコードにasciiを指定しています。
また、errorsでsurrogateescapeを指定してasciiでエラーが出た場合はUnicodeの代替用コードに置き換えられ、デコード時にはもとのバイト列に戻るようになっています。

#入力
with open(fname, 'r', encoding="ascii", errors="surrogateescape") as f:
    data = f.read()
 
#処理
# make changes to the string 'data'
 
#出力
with open(fname + '.new', 'w', encoding="ascii", errors="surrogateescape") as f:
    f.write(data)
#バイト列を返す場合
return data.encode(encoding="ascii", errors="surrogateescape")

コメントを残す

メールアドレスが公開されることはありません。