zoukankan      html  css  js  c++  java
  • Python 基础

    前情提要:字符编码

    python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)。ASCILL有255个字符,包括英语和西欧字符,不包括中文。汉字处理靠GBK, window的中文内码。Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,(注:此处说的的是最少2个字节,可能更多)

    UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

    注意三个关键:

    1.在python2默认编码是ASCII, python3里默认是unicode。 UTF-8是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

    Py3.x的转码操作

    首先,需要声明文件编码为GBK, 但是数据编码还是默认utf-8

    #  -*- coding:gbk -*-      # 改的是文件编码,非数据编码
    import sys
    print(sys.getdefaultencoding())  # 打印系统默认编码

     utf-8

    s = '你好'  # 这还是个unicode
    print(s.encode("gbk"))   # 转成gbk,转成bytes类型

    b'xc4xe3xbaxc3'

    print(s.encode('utf-8'))  # 转成UTF-8,也转成bytes类型

    b'xe4xbdxa0xe5xa5xbd'

    print(s.encode('utf-8').decode('utf-8').encode('gb2312'))

    b'xc4xe3xbaxc3'

    重要解读: Python 编码终极版 by 吴苑

  • 相关阅读:
    锁详解
    消息组件
    分布式锁
    jvm调优
    类加载
    垃圾回收
    Mysql
    redis
    悲观锁和乐光锁
    算法常见
  • 原文地址:https://www.cnblogs.com/lg100lg100/p/7093007.html
Copyright © 2011-2022 走看看