如何读取 Python 中的二进制字符串
How to read binary strings in Python
我想知道 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
代表什么以及这种二进制编码的工作原理。
\x
用于引入一个十六进制值,后面必须跟恰好两个十六进制数字。例如,\xe2
表示字节(十进制)226 (= 14 * 16 + 2).
第一种情况,b'\x25'
和b'%'
这两个字符串是相同的; Python 尽可能使用 ASCII 等价物显示值。
我假设您使用的是 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)。
我想知道 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
代表什么以及这种二进制编码的工作原理。
\x
用于引入一个十六进制值,后面必须跟恰好两个十六进制数字。例如,\xe2
表示字节(十进制)226 (= 14 * 16 + 2).
第一种情况,b'\x25'
和b'%'
这两个字符串是相同的; Python 尽可能使用 ASCII 等价物显示值。
我假设您使用的是 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)。