如何读取 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)。