1. ホーム
  2. python

[解決済み] Python - 'ascii'コーデックがバイトをデコードできない

2022-07-23 18:42:31

質問

本当に困っています。エンコードしようとしたのですが、エラーで can't decode... .

>>> "你好".encode("utf8")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

文字列のプレフィックスに"u"をつけてエラーを回避する方法はわかりました。ただ、encodeが呼ばれたのに、なぜ"can't decode"というエラーになるのかが不思議です。 Pythonはフードの下で何をしているのでしょうか?

どのように解決するのですか?

"你好".encode('utf-8')

encode は、unicodeオブジェクトを string オブジェクトに変換します。しかし、ここでは string オブジェクトに呼び出したのです(uを持っていないので)。そこで python は stringunicode オブジェクトに変換します。つまり、これは以下のことと同等です。

"你好".decode().encode('utf-8')

しかし、この文字列は有効なASCIIではないため、デコードに失敗します。そのため、デコードできないとの苦情が来るのです。