エンコードやデコードがうまくいかずにエラーになるのだがプログラムを止めずにとにかく表示させたい


概要


utf-8なら大抵エンコードがうまくいくのだが
utf-8意外だとエンコードがうまくいかないことがある
エンコードに失敗した文字があるとき

エンコード前の文字列.encode(エンコード形式,'ignore')

とすると、エンコードできなかった文字を飛ばして表示してくれる。

エンコード前の文字列.encode(エンコード形式,'replace')

とすると、エンコードできなかった文字を?に置き換えて表示してくれる。

これらを指定しない場合、エンコードに失敗する文字が一つでもあると
プログラムにエラーが起きてそこで止まってしまい
その後のプログラムが実行されずに終わってしまうので都合が悪い。
これらを使えばとりあえずはプログラムを最後まで実行できる。


temp = 'It is α'
print(temp.encode('utf-8'))
print(temp.encode('utf-8').decode('utf-8'))

print(temp.encode('ascii','ignore'))
print(temp.encode('ascii','replace'))

print(temp.encode('utf-8').decode('ascii','ignore'))
print(temp.encode('utf-8').decode('ascii','replace'))

変数tempに'It is α'を入れよ
tempをutf-8でエンコードして出力せよ
tempをutf-8でエンコードし、さらにそれをデコードして出力せよ

tempをasciiでエンコードし、エンコードできない文字は飛ばして表示せよ
tempをasciiでエンコードし、エンコードできない文字は?に置き換えて表示せよ

tempをutf-8でエンコードし、その後それをasciiでデコードせよ。デコードできない文字は飛ばして表示せよ
tempをutf-8でエンコードし、さらにそれをasciiでデコードして出力せよ。デコードできない文字は?に置き換えて表示せよ

出力


b'It is \xce\xb1'
It is α
b'It is '
b'It is ?'
It is
It is ��

説明


最後の2行は、エンコードまではうまくできているのだが
デコードがうまくいかず、アルファの文字がなくなったり?マークになったりしている。

間違えやすい問題