• 字符编码


    一、字符编码的种类

    1. ASCII

      用一个Byte表示一个字符,1byte=8bits,包含英文、拉丁文和键盘其他字符。

    2. GBK

      中国字符编码表,2Bytes代表一个字符。

    3. Shift_Jis

      日本字符编码表

    4. Euc_kr

      韩国字符编码表

    5. Unicode

      万国码,用2Bytes代表一个字符,兼容所有字符编码。优点是字符到二进制数据的转换速度快,缺点是占用空间大。

    6. UTF-8

      Unicode的改进版,对英文字符用1Byte表示,对中文字符用3Bytes。优点是节省空间,缺点是字符到二进制数据的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示。

    • 内存中使用的编码是unicode,用空间换时间(程序都需要加载到内存才能运行,因而内存应该是尽可能的保证快)
    • 硬盘中或者网络传输用utf-8,网络I/O延迟或磁盘I/O延迟要远大与utf-8的转换延迟,而且I/O应该是尽可能地节省带宽,保证数据传输的稳定性。

    二、程序的执行

    1. python解释器此时就是一个文本编辑器。从硬盘中读取test.py的内容到内存中。python解释器会读取py文件的第一行内容,#coding:xxx,来决定以什么编码格式来读入内存。可以用sys.getdefaultencoding()查看,如果不在python文件指定编码格式,那就使用默认的。python2中默认使用ascii,python3中默认使用utf-8

    2. 读取已经加载到内存的代码(unicode编码的二进制),然后执行,执行过程中可能会开辟新的内存空间。

      内存的编码使用unicode,不代表内存中全都是unicode编码的二进制,

      在程序执行之前,内存中确实都是unicode编码的二进制,比如从文件中读取了一行x="hello",其中的x,等号,引号,地位都一样,都是普通字符而已,都是以unicode编码的二进制形式存放与内存中的

      但是程序在执行过程中,会申请内存(与程序代码所存在的内存是俩个空间),可以存放任意编码格式的数据,比如x="hello",会被python解释器识别为字符串,会申请内存空间来存放"hello",然后让x指向该内存地址,此时新申请的该内存地址保存也是unicode编码的hello,如果代码换成x="hello".encode('utf-8'),那么新申请的内存空间里存放的就是utf-8编码的字符串hello了 。

    3. 产生结果,将结果发送到终端,不同终端支持特定的字符编码。

    三、encode 和 decode

    1. python2 默认ASCII码
    #coding=utf-8
    #Python2中默认是ASCII码,一般会加入以utf-8编程
    a = '编码'                       # a是utf-8类型
    b = a.decode('utf-8')       # b是Unicode类型
    c = b.encode('gbk')        #c是gbk类型
    d = c.decode('gbk').encode('utf-8')   #先将c转换成Unicode,再转成utf-8
    print a, type(a)    # 编码 <type 'str'>
    print b, type(b)    # 编码 <type 'unicode'>
    print c, type(c)    # ���� <type 'str'>
    print d, type(d)    # 编码 <type 'str'>
    
    1. Python3中默认是unicode
    a = '编码'                       # a是unicode类型
    b = a.encode('utf-8')       # b是utf-8类型
    c = a.encode('gbk')        #c是gbk类型
    print(a, type(a))    # 编码 <class 'str'>
    print(b, type(b))    # b'xe7xbcx96xe7xa0x81' <class 'bytes'>
    print(c, type(c))    # b'xb1xe0xc2xeb' <class 'bytes'>
    
  • 相关阅读:
    树莓派添加桌面快捷方式
    计算机网络
    django-auth2
    令牌桶算法-python
    linux centos-7 添加开机自启动脚本
    pymongodb-explain
    哈希表
    tcp/udp
    jemeter之jmeter+ant+jenkins搭建接口自动化测试环境
    jmeter之jmeter + ant + jenkins(二)Jenkins安装
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/11535121.html
Copyright © 2020-2023  润新知