字符编码
一开始制定字符编码只考虑了英文 ASCII编码表(包含英文、数字和常用字符), 0~127
为了统一,诞生了Unicode编码,包含了世界上所有国家的字符,对编码进行了大一统。每个字符占用3~6个字节,浪费空间
最终诞生了 utf-8可变长的 Unicode,一个汉字占3个字节,一个字母占1个字节,大大了减少了空间占用。
Python2和Python3的 字符编码 和 字符类型
Python3:
Unicode字符串 str 类型
非Unicode字符串 bytes 类型
Python2:
Unicode字符串 unicode 类型
非Unicode类型 str 类型
处理字符串写入文件时候的编码
# Python不能直接写 Unicode字符串到文件中, 必须写非Unicode
"""1. 手动转码处理"""
Python3:
# w写Unicode, wb写非Unicode(gbk,utf-8,jpg,mp4)
with open("xxx.txt", "wb") as f:
f.write(unicode_str.encode("utf-8"))
Python2:
# wb写Unicode, w写非Uncode(str)
with open("xxx.txt", "w") as f:
f.write(unicode_str.encode("utf-8"))
"""2. 通过open()方法的encoding参数"""
Python3:
with open("xxx.txt", "w", encoding="utf-8") as f:
f.write(unicode_str)
Python2:
Python2的 open() 没有 encoding,但是可以通过 codecs 模块解决
import codecs
with codecs.open("xxx.txt", "w", encoding="utf-8") as f:
f.write(unicode_str)
"""3. 如果强行写入Unicode字符串,且并没有通过1和2处理,则Python解释器编码尝试转码再写入"""
with open("xxx.txt", "w") as f:
f.write(unicode_str)
# Python2默认解释器编码是ascii,在处理中文则报错 UnicodeEncodeError无法按ASCII编码处理中文字符串,
# 解决方案,将Python2 解释器编码修改为utf-8
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
# Python3 默认解释器编码是utf-8,不会出现任何错误
代码文件头部编码声明
Python2 默认代码文件编码声明是ascii,所以代码中有中文部分会报错,解决方案,在代码第一行添加
#coding:utf-8
网友评论