我想知道如何在Python中给出字符串的二进制编码。
例如,
>>> b'\x25'
b'%'
或
>>>b'\xe2\x82\xac'.decode()
'€'
但是
>>> b'\xy9'
File "<stdin>", line 1
SyntaxError: (value error) invalid \x escape at position 0
请你解释一下\xe2
代表什么以及这种二进制编码是如何工作的。
答案 0 :(得分:2)
\x
用于引入十六进制值,并且必须后跟完全两个十六进制数字。例如,\xe2
表示字节(十进制)226(= 14 * 16 + 2)。
在第一种情况下,两个字符串b'\x25'
和b'%'
是相同的; Python尽可能使用ASCII等价物显示值。
答案 1 :(得分:0)
我假设您使用的是Python 3版本。在Python 3中,默认编码为UTF-8,因此b'\xe2\x82\xac'.decode()
实际上是b'\xe2\x82\xac'.decode('UTF-8)
。
它给出了unicode中U + 20AC的字符'€'
,U + 20AC的UTF8编码确实是3个字节的'b'\ xe2 \ x82 \ xac'。
因此所有ascii字符(低于128的代码)被编码为一个单字节,其值与unicode代码相同。对应于单个16位unicode值的非ascii字符被utf8编码为2或3个字节(这称为Basic Multilingual Plane)。