python2,python3的字符编码 和 字符类型

字符编码

一开始制定字符编码只考虑了英文 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

你可能感兴趣的:(python2,python3的字符编码 和 字符类型)