Python编码格式

Python encoding format

我需要将 python str 存储在数据库中以检索它,然后在其上应用 format()encode() 方法以塑造我的请求帧将其转换为 bytes,最后通过 socket.

send()

MWE是这样的:

fstr = '{slaveid:}{command:s}\x0d'
cstr = fstr.format(slaveid=chr(128+43), command='flags')
bstr = cstr.encode()

并产生以下输出:

{slaveid:}{command:s}
«flags
b'\xc2\xabflags\r'

我的问题出现在第三行,大于127的字符在执行encode()方法时变成了两个字节。假设这都是关于字符集定义的,因为默认编码 'ascii' 被限制为 127.

我应该如何定义我的编码以获得以下转换:

b'\xabflags\r'

charset tables面前有点迷茫。

如问题评论中所述,问题是 .encode() 方法默认将字符串编码为 UTF-8 的结果。 chr(128+43)插入的字符是\u00ab,UTF-8编码为两个字节:\xc2\xab.

解决方法是在调用.encode()时指定一个single-byte字符编码。以下任何一项都有效...

cstr.encode(encoding='latin_1')
cstr.encode(encoding='iso-8859-1')
cstr.encode(encoding='cp1252')

...虽然应该注意虽然 iso-8859-1 只是 latin_1 的别名,但 cp1252latin_1 不是 同样的事情。但是,在您的情况下,这无关紧要,因为实际的 "character" 并不重要,只是 range(256).

中的(单个)字节值