0

私はpython 2.7.10を使用します。python u ' u00b0'はu ' xb0'を返します。どうして?

文字エンコーディングを扱う場合や、対象物のスタックオーバーフローなどをたくさん読んだ後、私はこの動作に奇妙に見えました。 Pythonインタプリタの入力次の出力で

>>>u'\u00b0' 

結果:

u'\xb0' 

私は、DOSウィンドウ、アイドルコンソール、および翼-IDE Pythonシェルを使用して、この動作を繰り返すことができます。

私の前提条件(間違っていると私を修正してください): "度記号"にはユニコード0x00b0、utf-8コード0xc2b0、ラテン1コード0xb0があります。 Pythonのdocでは、u接頭辞を持つ文字列リテラルは、Unicodeを使ってエンコードされています。

質問:Unicodeエスケープシーケンスを保持する代わりに、結果がlatin-1エンコーディングに一致するバイトエスケープシーケンスを持つユニコード文字列リテラルに変換されるのはなぜですか?

ご協力いただきありがとうございます。

答えて

0

Pythonは、各文字に対してreprから何を出力するかを決定するためにいくつかのルールを使用します。 0x0080から0x00ffの範囲のUnicode文字コードポイントの規則は、\xddというシーケンスを使用することです。ここで、ddは少なくともPython 2では16進コードです。変更する方法はありません。 Python 3では、印刷可能な文字はすべて、16進コードに変換せずに表示されます。

Latin-1エンコードのように見える理由は、UnicodeがLatin-1をベースとして開始したからです。 0xffまでのすべてのコードポイントは、Latin-1の対応するものと一致します。

関連する問題