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

Nar*_*ewe 14 python string unicode encode decode

我试图通过自己encodedecodePython 来理解,但对我来说没有什么是真的.

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

首先,我不明白在这两个函数中需要"encoding"参数.

每个函数的输出是什么,它的编码是什么?每个函数中"encoding"参数的用途是什么?我真的不明白"字节串"的定义.

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

谢谢你的帮助.

lvc*_*lvc 21

它在Python 2中稍微复杂一点(与Python 3相比),因为它将'string'和'bytestring'的概念混淆了很多,但是看看绝对最低每个软件开发人员绝对必须知道Unicode和字符集.基本上,您需要了解的是"字符串"和"字符"是不能由计算机直接表示的抽象概念.bytestring是直接来自磁盘的原始字节流(或者可以直接从磁盘写入).encode从抽象到具体(你最好给它一个unicode字符串,它给你一个字节串); decode走的是相反的方式.

编码是规则,即'a'应由字节表示0x61,'α'由双字节序列表示0xc0\xb1.


Ned*_*der 17

我在PyCon,Pragmatic Unicode或者How How I Stop The Pain中的演示涵盖了所有这些细节.

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


dan*_*n04 6

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

  • str="字节字符串"=八位字节序列.它们用于"遗留"字符编码(例如windows-1252IBM437)和原始二进制数据(例如struct.pack输出).
  • unicode="Unicode字符串"= UTF-16UTF-32的序列,具体取决于Python的构建方式.

此模型已针对Python 3.x进行了更改:

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

字符编码是Unicode字符串和字节串之间的映射.要将Unicode字符串转换为字节字符串,请使用以下encode方法:

>>> u'\u20AC'.encode('UTF-8')
'\xe2\x82\xac'
Run Code Online (Sandbox Code Playgroud)

要转换其他方式,请使用以下decode方法:

>>> '\xE2\x82\xAC'.decode('UTF-8')
u'\u20ac'
Run Code Online (Sandbox Code Playgroud)