エラーメッセージは、何が問題かを正確に伝えます。Pythonインタープリターは、非ASCII文字のエンコードを知っている必要があります。
U + 00A3を返したい場合は、
return u'\u00a3'
これは、Unicodeエスケープシーケンスを介してこの文字を純粋なASCIIで表します。リテラルバイト0xA3を含むバイト文字列を返したい場合は、
return b'\xa3'
(Python 2ではb
暗黙的ですが、明示的の方が暗黙的より優れています)。
エラーメッセージ内のリンクされたPEPは、Pythonに「このファイルは純粋なASCIIではありません。ここで使用しているエンコーディングです」と正確に伝える方法を示しています。エンコーディングがUTF-8の場合、それは
# coding=utf-8
またはEmacs互換
# -*- encoding: utf-8 -*-
エディターがこのファイルを保存するために使用するエンコーディングがわからない場合は、16進エディターやグーグルなどで調べてください。スタックオーバーフロー文字コードタグには、詳細情報とトラブルシューティングのヒントが記載されたタグ情報ページがあります。
非常に多くの言葉で、7ビットのASCII範囲(0x00-0x7F)の外では、Pythonはバイトのシーケンスが表す文字列を推測することはできません。https://tripleee.github.io/8bit#a3は、バイト0xA3の21の可能な解釈を示しています。これは、レガシー8ビットエンコーディングからのものです。ただし、マルチバイトエンコーディングの最初のバイトにもなる可能性があります。しかし、実際には、実際にはLatin-1を使用していると思いますので、
# coding: latin-1
ソースファイルの1行目または2行目。とにかく、バイトが表す文字がわからない場合、人間もこれを推測できません。
警告:coding: latin-1
エラーメッセージは確実に削除されます(このエンコーディングでは技術的に許可されていないバイトシーケンスがないため)が、実際のエンコーディングが他のものである場合、コードが解釈されると完全に誤った結果が生成される可能性があります。エンコーディングを宣言するときは、ファイルのエンコーディングを完全に確実に知る必要があります。