gpt4 book ai didi

Python编码格式

转载 作者:行者123 更新时间:2023-12-01 04:14:42 26 4
gpt4 key购买 nike

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

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()时指定单字节字符编码。以下任何一项都可以...

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

...不过应该注意的是,虽然 iso-8859-1 只是 latin_1cp1252 的别名>latin_1不同是同一件事。但是,在您的情况下,这应该不重要,因为实际的“字符”并不重要,只是它在 range(256) 中的(单)字节值。

关于Python编码格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34451403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com