UnicodeDecodeError 解決策: 'ascii' コーデックがバイトをデコードできません
簡単な解決策
- 不必要なデコード/エンコードを避けてください。
- 文字列が UTF-8 として想定されていないことを確認してください
- できるだけ早く文字列を Unicode に変換します。
- ロケールの問題に対処します (リンク先の質問で説明されています)。
- クイック リロード修正を使用する誘惑に抵抗してください。
Unicode と Python について2.x
UnicodeDecodeError は通常、エンコードを指定せずに非 ASCII 文字を含む Python 2.x 文字列を Unicode に変換しようとすると発生します。
Unicode 文字列 (タイプ: unicode) はシーケンスを表します。 Unicode ポイント コードの一方、文字列 (タイプ: str) にはエンコードされたテキスト (UTF-8、UTF-16 など) が含まれます。文字列は Unicode にデコードされ、Unicode は文字列にエンコードされます。
明示的な変換、形式文字列、文字列の連結などの多くのシナリオで、非 ASCII データを処理するときに UnicodeDecodeError がトリガーされる可能性があります。
入力およびデコード
- Unicode 文字列を使用するソース コード内の非 ASCII 文字には (接頭辞「u」が付きます)。
- 正しいデコードを容易にするために、ソース コード ファイルにエンコード ヘッダーを提供します。
- 適切なエンコードで io.open を使用して、ファイルをその場でデコードします。
- 非 ASCII CSV には backports.csv を使用します。ファイル。
- Unicode でデータを返し、クエリに Unicode 文字列を使用するようにデータベースを構成します。
- 正しいエンコードの string.decode(encoding) を使用して手動でデコードします。
中間処理
- Unicode 文字列を使用した場合と同様に操作します。通常の文字列。
出力
- print は、コンソールのエンコードに基づいて Unicode をエンコードします。
- io.open を使用して、Unicode をファイルのエンコードされたバイト文字列に変換します。 .
- Unicode を書き込むための正しいデータベース構成を確認してください。 data.
Python 3 の考慮事項
Python 3 は Unicode をより適切に処理しますが、ネイティブの Unicode 機能が付属していないことを理解することが重要です。デフォルトのエンコーディングは UTF-8 で、open() はテキスト モードで動作し、ロケール エンコーディングを使用してデコードされた str (Unicode) を返します。
sys.setdefaultencoding('utf8') を回避します
これハックは根本的な問題を覆い隠し、Python 3 への移行を妨害します。代わりに、根本原因に対処し、Unicode zen を採用してください。
以上がPython の「UnicodeDecodeError: 'ascii' codec can't decode byte...」を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。