web-dev-qa-db-ja.com

文字列エンコーディングのPython-3と\ x Vs \ u Vs \ Uとその理由

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'
8
MaNKuR

Pythonは文字列の表現を提供し、印刷できない文字の場合は使用可能な最短のエスケープシーケンスを使用します。

_\x80_は_\u0080_または_\U00000080_と同じ文字ですが、_\x80_は少し短いです。 chr(57344)の場合、最短の表記は_\ue000_であり、同じ文字を_\xhh_で表すことはできません。この表記は、_\0xFF_までの文字にのみ使用できます。

一部の文字には、改行の場合は_\n_、タブの場合は_\t_のように、1文字のエスケープもあります。

Pythonには、歴史的および実用的な理由から、複数の表記オプションがあります。 バイト文字列では、0〜255の範囲のバイトしか作成できないため、_\xhh_は、使用できないときにどこでも_\U000hhhhh_を使用するよりも便利で簡潔です。その表記法で利用可能な全範囲を使用することもでき、_\xhh_と_\n_および関連するコードは他の言語のプログラマーにはなじみがあります。

11
Martijn Pieters