zoukankan      html  css  js  c++  java
  • python学习:字符编码与转码

    在Python3中必须先弄清楚的三个问题:
    1、Python3中默认是Unicode编码。
    2、gbk --> utf-8、utf-8 --> gbk都要通过Unicode“中转”一下。
    3、在Python3中,encode后不仅转了编码,还把结果转成了bytes类型。如果要显示中文,再decode一下就可以了。
    import sys
    
    print("Defaultencoding :", sys.getdefaultencoding())
    
    s = '你好'   # s是unicode
    # 转为UTF-8编码
    print(s.encode('UTF-8'))
    # 转为GBK编码
    print(s.encode('GBK'))
    # 转为ASCII编码(报错为什么?因为ASCII码表中没有‘你好’这个字符集~~)
    # print(s.encode('ASCII'))
    
    print("---------utf-8 --> gbk---------")
    # utf-8 --> gbk
    s = '你好'   # s是unicode
    # 可以直接encode转,因为s就是unicode,不需要再转成uincode
    s_gbk = s.encode('gbk') # 此时已经转成了gbk,结果是一个bytes类型:b'xc4xe3xbaxc3'
    print(s_gbk)
    print(s_gbk.decode('gbk')) #为了显示中文,才decode
    
    print("---------gbk --> utf-8---------")
    # gbk --> utf-8
    s = '你好'   # s是unicode
    s_gbk = s.encode('gbk') # 先转换成gbk,再gbk --> utf-8
    # 先decode解码,告诉decode原来是什么编码,然后再encode指定要转换成的目标编码
    s_utf8 = s_gbk.decode('gbk').encode('utf-8') # 此时已经转成了utf-8,结果是一个bytes类型:b'xe4xbdxa0xe5xa5xbd'
    print(s_utf8)
    print(s_utf8.decode()) #为了显示中文,才decode
    
    print("---------gbk --> gb2312---------")
    # gbk --> gb2312
    s = '你好'   # s是unicode
    s_gbk = s.encode('gbk') # 先转换成gbk,再gbk --> gb2312 ,模拟需要
    s_gb2312 = s_gbk.decode('gbk').encode('utf-8').decode('utf-8').encode('gb2312')
    print(s_gb2312)
    print(s_gb2312.decode('gb2312'))
    
    print("---------gb2312 --> gbk---------")
    # gb2312 --> gbk
    s = '你好'   # s是unicode
    s_gb2312 = s.encode('gb2312') # 先转换成gbk,再gb2312 --> gbk,模拟需要
    s_gbk = s_gb2312.decode('gb2312').encode('utf-8').decode('utf-8').encode('gbk')
    print(s_gbk)
    print(s_gbk.decode('gbk'))
    
    print("---------utf-8 --> gb2312---------")
    # utf-8 --> gb2312
    s = '你好'   # s是unicode
    s_gb2312 = s.encode('gb2312')
    print(s_gb2312.decode('gb2312'))
    
    运行结果:
    Defaultencoding : utf-8
    b'xe4xbdxa0xe5xa5xbd'
    b'xc4xe3xbaxc3'
    ---------utf-8 --> gbk---------
    b'xc4xe3xbaxc3'
    你好
    ---------gbk --> utf-8---------
    b'xe4xbdxa0xe5xa5xbd'
    你好
    ---------gbk --> gb2312---------
    b'xc4xe3xbaxc3'
    你好
    ---------gb2312 --> gbk---------
    b'xc4xe3xbaxc3'
    你好
    ---------utf-8 --> gb2312---------
    你好
  • 相关阅读:
    算法(Algorithms)第4版 练习 1.3.4
    算法(Algorithms)第4版 练习 1.3.5
    算法(Algorithms)第4版 练习 1.3.6
    微服务迁移步骤建议
    xxxx interview问题解读与总结
    乐观锁与悲观锁——解决并发问题
    编码解码--三种常见字符编码简介:ASCII、Unicode和UTF-8
    编码解码--url编码解码
    分页缓存预加载算法
    Could not initialize class sun.awt.X11FontManager 异常问题
  • 原文地址:https://www.cnblogs.com/Ryan-Fei/p/12103668.html
Copyright © 2011-2022 走看看