ホームページ > バックエンド開発 > Python チュートリアル > UnicodeDecodeError を解決する方法: 'ascii' コーデックは Python 2.x でバイトをデコードできませんか?

UnicodeDecodeError を解決する方法: 'ascii' コーデックは Python 2.x でバイトをデコードできませんか?

Barbara Streisand
リリース: 2024-12-21 03:01:09
オリジナル
1017 人が閲覧しました

How to Solve the UnicodeDecodeError: 'ascii' codec can't decode byte in Python 2.x?

UnicodeDecodeError: 'ascii' コーデックがバイトをデコードできません

UnicodeDecodeError: 'ascii' コーデックが Python 2.x でバイトをデコードできませんが試行を示しています非 ASCII 文字を含む Python 2.x str を Unicode 文字列に変換します。元の文字列のエンコーディングを指定します。

Python 2.x の Unicode Zen

Unicode 文字列は、文字列とは異なり、Unicode ポイント コードを保持し、スペクトル全体の任意の Unicode ポイントを表すことができます。一方、文字列には、UTF-8、UTF-16、ISO-8895-1 などのエンコードされたテキストが含まれます。文字列は Unicode にデコードされ、その逆も行われます。ファイルとテキスト データは常にエンコードされた文字列で転送されます。

Markdown モジュールは unicode() を使用して受信文字列を検証し、それらが ASCII 文字列または再ラップされた Unicode 文字列であることを確認します。 Markdown の作成者は、受信文字列のエンコーディングを決定できないため、文字列を渡す前にユーザーが文字列を Unicode にデコードすることに依存しています。

Unicode 文字列は、コードの前に「u」接頭辞を使用して宣言できます。弦。例:

my_u = u'my ünicôdé strįng'
ログイン後にコピー

注意点

明示的な unicode() 呼び出しがなくても、str から Unicode への変換が発生する可能性があります。次の状況では、UnicodeDecodeError 例外がトリガーされる可能性があります:

  • エンコードなしの明示的な変換: unicode('€')
  • Unicode 文字列での新しいスタイルの形式文字列の使用: u"通貨は: { }".format('€')
  • Unicode 文字列での古い形式の書式文字列の使用: u'通貨は: %s' % '€'
  • Unicode への文字列の追加: u'通貨は: ' '€'

入力とデコード

ソース コード: 非 ASCII 文字は、Unicode 文字列を使用してソース コードに含めることができます。 「u」接頭語。 Python がソース コードを正しくデコードできるようにするには、正しいエンコード ヘッダーが含まれている必要があります。 UTF-8 ファイルの場合、次を使用します:

# encoding: utf-8
ログイン後にコピー

ファイル: 正しいエンコーディングで io.open を使用して、ファイルをオンザフライでデコードします。たとえば、UTF-8 ファイルの場合:

import io
with io.open("my_utf8_file.txt", "r", encoding="utf-8") as my_file:
  my_unicode_string = my_file.read()
ログイン後にコピー

データベース: Unicode 文字列を返し、SQL クエリに Unicode 文字列を使用するようにデータベースを構成します。

HTTP: Web ページにはさまざまなエンコーディングを使用できます。 Python-Requests は、response.text で Unicode を返します。

手動: my_string.decode(encoding) を使用して文字列を手動でデコードします。エンコーディングは適切なエンコードです。

Python 3

Python 3 は、Python 2.x とは若干異なる方法で Unicode を処理します。通常の str は Unicode 文字列になり、古い str はバイトになりました。

Python 3 では、デフォルトのエンコードは UTF-8 であるため、エンコードを指定せずにバイト文字列をデコードするには UTF-8 が使用されます。さらに、open() はデフォルトでテキスト モードで動作し、デコードされた str (Unicode 文字列) を返します。

以上がUnicodeDecodeError を解決する方法: 'ascii' コーデックは Python 2.x でバイトをデコードできませんか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート