Python编码形式

2024-10-04 05:25:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要将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()

并产生以下输出:

^{pr2}$

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

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

b'\xabflags\r'

我在charset tables面前有点迷路了。在


Tags: 方法框架send数据库format编码bytes定义
1条回答
网友
1楼 · 发布于 2024-10-04 05:25:25

正如问题的注释中提到的,这个问题是.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_1的别名,cp1252和{}是一回事。但是,在您的情况下,它不应该重要,因为实际的“字符”并不重要,只是它在range(256)中的(单)字节值。在

相关问题 更多 >