美文网首页
python2,python3的字符编码 和 字符类型

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

作者: 奶茶分你一半 | 来源:发表于2018-11-25 09:17 被阅读0次

    字符编码

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

          本文链接:https://www.haomeiwen.com/subject/lzouqqtx.html