2017-01-02 14 views
3

bytesの表記が何であるかを誰かが識別できますか?一見、私は「16進数」と考える傾向があるが、私はxf1Ye1flのようなものが何であるかを認識しません:私はsome_text.encode('utf-8')を使用して物事をエンコードするときPython用の奇妙な表記3バイト

b'vy\xe9\xb5\xa2\xba\xf1Y\xe8\xe1fl\x1d\x87\xacC' 

が、私はこれを取得します。

私はPython 2のバイト文字列で動作する暗号化メソッドに渡すことができるバイトを取得しようとしています。

答えて

4

あなたはそうです - それは16進表記です。リテラルバイトで

は、印刷可能なASCII文字(または標準のいずれ\n\t又は\rをエスケープ)で表されることができない任意のバイトは、NNは2桁の16進表現であり、\xNNとして表されバイト。

あなたが間違っていることは、あなたが誤っていることです。シングルエスケープシーケンスのため\xf1Y、実際には二つの別々のバイトを表します

>>> len(b'\xf1Y') 
2 
>>> [bytes([b]) for b in b'\xf1Y'] 
[b'\xf1', b'Y'] 

あなたはbytesオブジェクトを反復した場合、あなたはバイトの整数値が返されます:

>>> list(b'vy\xe9\xb5\xa2\xba\xf1Y\xe8\xe1fl\x1d\x87\xacC') 
[118, 121, 233, 181, 162, 186, 241, 89, 232, 225, 102, 108, 29, 135, 172, 67] 
>>> bytes([118]) 
b'v' 
>>> bytes([121]) 
b'y' 
>>> bytes([233]) 
b'\xe9' 

escape sequences in Python string and bytes objectsのドキュメントには、Pythonが理解できるエスケープシーケンスについての情報が少しあります(上記のものだけがバイトオブジェクトを表すために使用されています)。

+1

ありがとうございます!はい、それは私を混乱させていました。私はそれが/ x__の16進コードと一緒にリテラルキャラクターの描写を混ぜていることは知らなかった。 –