不少初学者怎么也记不住 str 与 unicode 之间的转换用 encode 照样 decode,如不雅你记住了 str 本质上其实是一串二进制数据,而 unicode 是字符(符号),编码(encode)就是把字符(符号)转换为 二进制数据的过程,是以 unicode 到 str 的转换要用 encode 办法,反过来就是用 decode 办法。
引用
encoding always takes a Unicode string and returns a bytes sequence, and decoding always takes a bytes sequence and returns a Unicode string".
清跋扈了 str 与 unicode 之间的转换关系之后,我们来看看什么时刻会出现 UnicodeEncodeError、UnicodeDecodeError 缺点。
UnicodeEncodeError
UnicodeEncodeError 产生在 unicode 字符串转换成 str 字节序列的时刻,来看一个例子,把一串 unicode 字符串保存到文件
Python2 中的字符编码
- # -*- coding:utf-8 -*-
- def main():
- name = u'Python之禅'
- f = open("output.txt", "w")
- f.write(name)
缺点日记
因为调用 write 办法时,法度榜样会把字符经由编码转换成二进制字节序列,内部会有 unicode 到 str 的编码转换过程,法度榜样会先断定字符串是什么类型,如不雅是 str,就直接写入文件,不须要编码,因为 str 类型的字符串本身就是一串二进制的字节序列了。如不雅字符串是 unicode 类型,那么它会先调用 encode 办法把 unicode 字符串转换成二进制情势的 str 类型,才保存到文件,而 Python2中,encode 办法默认应用 ascii 进行 encde.
相当于:
- >>> u"Python之禅".encode("ascii")
然则,我们知道 ASCII 字符集中只包含了128个拉丁字母,不包含中文字符,是以 出现了 'ascii' codec can't encode characters 的缺点。要精确地应用 encode ,就必须指定一个包含了中文字符的字符集,比如:UTF-8、GBK。
- >>> u"Python之禅".encode("utf-8")
- 'Python\xe4\xb9\x8b\xe7\xa6\x85'
- >>> u"Python之禅".encode("gbk")
- 'Python\xd6\xae\xec\xf8'
所以要把 unicode 字符串精确地写入文件,就应当预先把字符串进行 UTF-8 或 GBK 编码转换。
- def main():
- name = u'Python之禅'
- name = name.encode('utf-8')
- with open("output.txt", "w") as f:
- f.write(
推荐阅读
捷报道,美国华盛顿大年夜学的研究人员正在研究所谓的“智能织物”,他们的重点放在磁化纺织品上。这种纺织品可以存储能被磁力仪攫取的少量数据,包含存储在大年夜多半智妙手机内部的数据。这>>>详细阅读
本文标题:一筹莫展?来看看字符编码的前世今生吧
地址:http://www.17bianji.com/lsqh/38408.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示