UnicodeDecodeError: 'ascii' codec can't decode byte は、通常、非を含む Python 2.x str を変換しようとすると発生します。 -元の文字列のエンコーディングを指定せずに、ASCII 文字を Unicode 文字列に変換します。
Unicode 文字列(Unicode とも呼ばれます) は、Unicode ポイント コードを保持する Python の別個の文字列タイプであり、スペクトル全体の任意の Unicode ポイントを表すことができます。対照的に、文字列にはさまざまな形式 (UTF-8、UTF-16、ISO-8895-1 など) でエンコードされたテキストが含まれます。
Markdown モジュールの開発者は、おそらく unicode() を品質ゲートとして使用して、受信を保証します。文字列はUnicodeです。受信文字列のエンコーディングを決定できないため、Markdown に渡す前にデコードする必要があります。
Unicode 文字列は、「u」プレフィックスを使用してコード内で宣言できます:
my_u = u'my ünicôdé strįng' print(type(my_u)) # <type 'unicode'>
Unicode 文字列は、ファイル、データベース、またはネットワーク モジュールからも発生する可能性があり、その場合は、
Unicode 変換は、明示的な unicode() 呼び出しがなくても発生する可能性があります。
# Explicit conversion without encoding unicode('€') # New-style format string into Unicode string # Python attempts to convert value string to Unicode first u"The currency is: {}".format('€') # Old-style format string into Unicode string # Python attempts to convert value string to Unicode first u'The currency is: %s' % '€' # Append string to Unicode # Python attempts to convert string to Unicode first u'The currency is: ' + '€'
次の図では、「カフェ」 」は端末の種類により「UTF-8」と「Cp1252」でエンコードが異なります。どちらの場合も、「caf」はプレーン ASCII でエンコードされます。 UTF-8 では「é」を表すのに 2 バイトを使用しますが、Cp1252 では Unicode ポイント値とも一致する 1 バイトを使用します。この場合、正しいエンコーディングで decode() が呼び出され、Unicode への変換が正常に実行されます。
[正しいエンコーディングでの Unicode 変換の成功の図]
ただし、decode の場合() は「ascii」で呼び出されます。これは、エンコーディングを指定せずに unicode() を呼び出すのと似ており、UnicodeDecodeError が発生します。
[間違ったエンコーディングで失敗した Unicode 変換の図]
コード内に「Unicode サンドイッチ」を作成することをお勧めします。ここで、
このアプローチにより、全体を通して文字列のエンコードについて心配する必要がなくなります。 code.
ファイルの場合は、io モジュールの TextWrapper を適切なエンコーディング:
my_u = u'my ünicôdé strįng' print(type(my_u)) # <type 'unicode'>
以上がPython の「UnicodeDecodeError: 'ascii' codec can't decode byte」エラーを解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。