首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >我不懂Python (2.7.3)中的编码和解码

我不懂Python (2.7.3)中的编码和解码
EN

Stack Overflow用户
提问于 2012-07-22 07:30:10
回答 4查看 25.9K关注 0票数 16

我试图自己理解Python语言中的encodedecode,但对我来说什么都不是很清楚。

  1. str.encode([encoding,[errors]])
  2. str.decode([encoding,[errors]])

首先,我不理解这两个函数中是否需要“编码”参数。

每个函数的输出是什么,其编码是什么?在每个函数中“编码”参数的用途是什么?我真的不太理解“字节串”的定义。

我有一个重要的问题,有什么方法可以从一种编码传递到另一种编码吗?我在ASN.1上读过一些关于“八位字节字符串”的文本,所以我想知道它是否与“字节字符串”相同。

谢谢你的帮助。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-22 07:42:17

在Python2中(与Python3相比)要复杂一些,因为它将“string”和“bytestring”的概念混淆了很多,但请参阅The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets。本质上,你需要理解的是“字符串”和“字符”是抽象的概念,不能由计算机直接表示。字节串是直接从磁盘(或者可以直接从磁盘写入)的原始字节流。encode从抽象到具体(您最好给它一个unicode字符串,它返回一个字节字符串);decode则相反。

编码的规则是'a‘应该由字节0x61表示,而'α’应该由两个字节的序列0xc0\xb1表示。

票数 24
EN

Stack Overflow用户

发布于 2012-07-22 08:04:50

我在PyCon,Pragmatic Unicode, or, How Do I Stop The Pain的演示文稿涵盖了所有这些细节。

简而言之,Unicode字符串是称为代码点的整数序列,而字节字符串是字节序列。编码是将Unicode代码点表示为一系列字节的一种方式。因此,unicode_string.encode(enc)将返回使用"enc“编码的Unicode字符串的字节字符串,而byte_string.decode(enc)将返回通过使用"enc”对字节字符串进行解码而创建的Unicode字符串。

票数 18
EN

Stack Overflow用户

发布于 2012-07-22 07:59:22

Python 2.x有两种类型的字符串:

  • str = "byte string“=八位字节序列。它们既可用于“传统”字符编码(如windows-1252IBM437),也可用于原始二进制数据(如struct.pack Python = "Unicode string“=一系列UTF-16UTF-32,具体取决于struct.pack的构建方式。)

这个模型是changed for Python 3.x

  • 2.x unicode变为3.x str (并且从文字中删除了u前缀)。
  • 引入了一种用于表示二进制数据的bytes类型。

character encoding是Unicode字符串和字节字符串之间的映射。要将Unicode字符串转换为字节字符串,请使用encode方法:

代码语言:javascript
复制
>>> u'\u20AC'.encode('UTF-8')
'\xe2\x82\xac'

要以另一种方式转换,请使用decode方法:

代码语言:javascript
复制
>>> '\xE2\x82\xAC'.decode('UTF-8')
u'\u20ac'
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11596623

复制
相关文章

相似问题

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