我需要将python str存储在数据库中,以检索它,然后在其上应用format()和encode()方法,以形成请求框架,将其转换为bytes,最后通过socket将其send()。
我们是这样的:
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'我的问题发生在第三行,当执行encode()方法时,大于127的字符变成两个字节。假设这都是关于字符集定义的,因为默认编码'ascii'仅限于127。
如何定义编码以获得以下转换:
b'\xabflags\r'我在字符集表面前有点迷路了。
发布于 2016-01-06 18:56:50
正如问题的注释中所提到的,这个问题是默认将字符串编码为UTF-8的.encode()方法的结果。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和latin_1并不是一回事。但是,在您的情况下,这并不重要,因为实际的“字符”并不重要,只是它在range(256)中的(单)字节值。
https://stackoverflow.com/questions/34451403
复制相似问题