Python 3で異なるバイト指向の文字列表現があるのはなぜですか?複数ではなく単一の表現で十分ではないでしょうか?
ASCII範囲番号を出力する場合、文字列は\x
で始まるシーケンスを示します。
In [56]: chr(128)
Out[56]: '\x80'
異なる範囲の数値では、Pythonは\u
で始まるシーケンスを使用します
In [57]: chr(57344)
Out[57]: '\ue000'
ただし、最大範囲の数値、つまり現在の最大Unicode数値では、先頭に\U
が使用されます。
In [58]: chr(1114111)
Out[58]: '\U0010ffff'
Pythonは文字列の表現を提供し、印刷できない文字の場合は使用可能な最短のエスケープシーケンスを使用します。
_\x80
_は_\u0080
_または_\U00000080
_と同じ文字ですが、_\x80
_は少し短いです。 chr(57344)
の場合、最短の表記は_\ue000
_であり、同じ文字を_\xhh
_で表すことはできません。この表記は、_\0xFF
_までの文字にのみ使用できます。
一部の文字には、改行の場合は_\n
_、タブの場合は_\t
_のように、1文字のエスケープもあります。
Pythonには、歴史的および実用的な理由から、複数の表記オプションがあります。 バイト文字列では、0〜255の範囲のバイトしか作成できないため、_\xhh
_は、使用できないときにどこでも_\U000hhhhh
_を使用するよりも便利で簡潔です。その表記法で利用可能な全範囲を使用することもでき、_\xhh
_と_\n
_および関連するコードは他の言語のプログラマーにはなじみがあります。