我试图自己理解Python语言中的encode
和decode
,但对我来说什么都不是很清楚。
str.encode([encoding,[errors]])
str.decode([encoding,[errors]])
首先,我不理解这两个函数中是否需要“编码”参数。
每个函数的输出是什么,其编码是什么?在每个函数中“编码”参数的用途是什么?我真的不太理解“字节串”的定义。
我有一个重要的问题,有什么方法可以从一种编码传递到另一种编码吗?我在ASN.1上读过一些关于“八位字节字符串”的文本,所以我想知道它是否与“字节字符串”相同。
谢谢你的帮助。
发布于 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
表示。
发布于 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字符串。
发布于 2012-07-22 07:59:22
Python 2.x有两种类型的字符串:
str
= "byte string“=八位字节序列。它们既可用于“传统”字符编码(如windows-1252或IBM437),也可用于原始二进制数据(如struct.pack
Python = "Unicode string“=一系列UTF-16或UTF-32,具体取决于struct.pack
的构建方式。)unicode
变为3.x str
(并且从文字中删除了u
前缀)。bytes
类型。character encoding是Unicode字符串和字节字符串之间的映射。要将Unicode字符串转换为字节字符串,请使用encode
方法:
>>> u'\u20AC'.encode('UTF-8')
'\xe2\x82\xac'
要以另一种方式转换,请使用decode
方法:
>>> '\xE2\x82\xAC'.decode('UTF-8')
u'\u20ac'
https://stackoverflow.com/questions/11596623
复制相似问题