• 12.编码问题讨论


    编码问题是个头疼的问题,相信不少人都被坑过。

    1.编码的种类:

    (1)ASCII:占用1个字节,只支持英文

    (2)GB2312:英文占用1个字节,中文占用两个字节,支持6000多个汉字

    (3)GBK:是GB2312的升级版本,支持20000多个汉字

    (4)一些其它国家的语言支持编码

    (5)由于很多国家的语言都不一样,如果每个国家都是用自己的编码方式就太混乱了,所以出现了万国码--unicode

    (6)Unicode:占2-4个字节,目前包括13万多个字符

    2.unicode的作用与缺陷

    (1)作用:支持全球所有的语言,并且有与所有国家编码的映射关系

    (2)缺陷:对于一些字符,比如英文,原来只需要1个字节就可以表示的,现在变成了2个字节,在网络传输与存储上比原来多了1倍,所以为了解决这个问题出现了utf系列,如下

    3.utf编码系列,解决unicode的缺陷

    (3)utf8:使用1-4个字节来表示所有字符,英文占用1个字节,欧洲那边一些国家语言占用2个字节,亚洲这边一些国家占用3个字节(中文),一些特殊的字符占用4个字节,utf8是现在项目中使用最为频繁的一种编码方式

    (4)utf16:使用2个或者4个字节

    (5)utf32:使用4个字节

    4.编码之间的相互转换

    如图所示:unicode到GBK或者utf8的过程称为编码,而GBK和utf8到unicode的过程叫解码,GBK和utf8之间不能直接转换,只能以unicode为中介进行转换。

    5.python中的编码问题

    (1)先来说一说python2,它的默认编码是ASCII,如果要写中文,需要在代码的开头声明编码格式是GBK或者UTF8,在python2的解释器进行解释执行时,就会根据头声明的编码进行解释,如果没有声明则使用默认的ASCII

    (2)python3中默认编码的格式是utf8,如果需要改成其它编码可以在代码的开头声明,在解释器进行解释执行时会转化成unicode,这里跟python2解释时有所区别,好好体会下面代码和执行结果

    # -*- coding: utf-8 -*-
    #__author:jiangjing
    #date:2018/2/8
    
    print('测试')

    python2和python3分别执行这个测试代码的结果,如下所示:(windows的cmd窗口默认的编码格式是GBK的)

    分析:代码声明的是utf8编码,造成这个结果的原因是:在python2中,解释器解释执行时就是按照声明的utf8编码执行的,但是因为windows下cmd窗口是GBK编码格式,utf8编码不能直接转化成GBK所以造成乱码,但是在python3中解释器解释执行时是会转化成unicode编码,然后unicode是可以解码成GBK的,所以不会乱码。

    (3)python2中的str和bytes是同一个概念,如图,s就是一个字节串

    (4)到了python3中,str与bytes是不同的概念,如下图

  • 相关阅读:
    [UVA10859 放置街灯 Placing Lampposts]
    洛谷7月月赛题解(2020)
    [学习笔记]马拉车-Manacher
    [SP1026] FAVDICE
    [NOIP2013]货车运输
    [洛谷P1801]黑匣子
    [HAOI2015]树上染色
    python-第二块:time模块和datatime模块
    python-作业:员工信息表
    python-第二块,笔记整理和学习内容复习(day7)
  • 原文地址:https://www.cnblogs.com/jiangjing/p/8433450.html
Copyright © 2020-2023  润新知