zoukankan      html  css  js  c++  java
  • Day2-字符编码转换


    1.在python2默认编码是ASCII, python3里默认是unicode

    2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

    3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

    python2支持以下图:

    Python2# vim encode.py
    #_*_ coding:utf-8 -*_
    import sys
    print(sys.getdefaultencoding()) #打印系统默认编码,Centos7为ASCII码

    s = "你好" #默认是使用系统编码,utf-8
    s_to_unicode = s.decode("utf-8") #utf-8先转换成unicode
    print(s_to_unicode,type(s_to_unicode)) #打印目前的编码类型
    s_to_gbk = s_to_unicode.encode("gbk") # unicode转换成gbk
    print(s_to_gbk)

    #反解回去
    gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8") #gbk先解码成unicode再编码成utf-8
    print(gbk_to_utf8)

    新东西:
    #-*_- coding:utf-8 -*-

    s = u"你好" #加个u表示s是unicode编码
    print(s)
    执行结果:你好
    分析:utf-8是unicode的扩展集,这么写,在utf-8中可以直接打印,而gbk则不行

    Python3的PyCharm下:
    unicode转换成gbk格式:
    s="你好" #python3默认是unicode编码
    print(s.encode("gbk")) #直接转换成gbk
    b'xc4xe3xbaxc3' #python3里转码了之后,变成b二进制类型,跟python2的区别
    为什么不能打印出来呢?因为python3默认unicode编码,现转换成了gbk,所以不能打印。解决是声明

    #-*-codinf:gbk-*- 声明这个文件编码方式
    importsys
    print(sys.getdefaultcoding())

    s="你好" #但s还是unicode编码,文件编码与字符串无关
    print(s.encode("gbk"))
    print(s.encode("utf-8").decode("utf-8").encode("gb2312").decode("gb2312"))

    Python3里encode时候不仅转了编码,还生成二进制bytes,decode下又变成了字符串。

  • 相关阅读:
    MSB4064 错误
    javascript 通过模块模式实现代码访问控制
    vs 2012 更新update4 后出现问题
    html 转 PDF wkhtmltopdf image 不能显示的问题
    Html方式导出word 页头和页脚设置
    使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性
    经验1-打印web
    DataGridView 多线程更新 数据 解决卡顿问题
    Copy List with Random Pointer [LeetCode]
    Validate Binary Search Tree [LeetCode]
  • 原文地址:https://www.cnblogs.com/wolfs685/p/6720779.html
Copyright © 2011-2022 走看看