Nar*_*ewe 14 python string unicode encode decode
我试图通过自己encode
和decode
Python 来理解,但对我来说没有什么是真的.
str.encode([encoding,[errors]])
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字符串.
Python 2.x有两种类型的字符串:
str
="字节字符串"=八位字节序列.它们用于"遗留"字符编码(例如windows-1252或IBM437)和原始二进制数据(例如struct.pack
输出).unicode
="Unicode字符串"= UTF-16或UTF-32的序列,具体取决于Python的构建方式.此模型已针对Python 3.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)
归档时间: |
|
查看次数: |
19634 次 |
最近记录: |