首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python编码格式

Python编码格式
EN

Stack Overflow用户
提问于 2015-12-24 10:34:41
回答 1查看 1.3K关注 0票数 1

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

我们是这样的:

代码语言:javascript
复制
fstr = '{slaveid:}{command:s}\x0d'
cstr = fstr.format(slaveid=chr(128+43), command='flags')
bstr = cstr.encode()

并产生以下输出:

代码语言:javascript
复制
{slaveid:}{command:s}
«flags
b'\xc2\xabflags\r'

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

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

代码语言:javascript
复制
b'\xabflags\r'

我在字符集表面前有点迷路了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-06 18:56:50

正如问题的注释中所提到的,这个问题是默认将字符串编码为UTF-8的.encode()方法的结果。chr(128+43)插入的字符是\u00ab,它以UTF-8:\xc2\xab编码成两个字节。

解决方案是在调用.encode()时指定单字节字符编码。以下任何一项都会有效..。

代码语言:javascript
复制
cstr.encode(encoding='latin_1')
cstr.encode(encoding='iso-8859-1')
cstr.encode(encoding='cp1252')

..。尽管需要注意的是,虽然iso-8859-1只是latin_1的别名,但是cp1252latin_1并不是一回事。但是,在您的情况下,这并不重要,因为实际的“字符”并不重要,只是它在range(256)中的(单)字节值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34451403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档