我需要将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面前有点迷路了。在
正如问题的注释中提到的,这个问题是
.encode()
方法在默认情况下将字符串编码为UTF-8的结果。chr(128+43)
插入的字符是\u00ab
,它在UTF-8中编码为两个字节:\xc2\xab
。在解决方案是在调用
.encode()
时指定单字节字符编码。以下任何一个都可以。。。在。。。尽管需要注意的是,}是一回事。但是,在您的情况下,它不应该重要,因为实际的“字符”并不重要,只是它在
iso-8859-1
只是latin_1
的别名,cp1252
和{range(256)
中的(单)字节值。在相关问题 更多 >
编程相关推荐