zoukankan      html  css  js  c++  java
  • 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是不同的概念,如下图

  • 相关阅读:
    最全最详尽的ajax教程1
    Mysql笔记(一)
    JAVA基础知识整理(五)
    JAVA基础知识点整理(四)
    JAVA基础知识点整理(三)
    JAVA基础知识点整理(二)
    JAVA基础知识点整理(一)
    JAVA Web知识点整理(六)
    JAVA Web知识点整理(五)
    JAVA Web知识点整理(四)
  • 原文地址:https://www.cnblogs.com/jiangjing/p/8433450.html
Copyright © 2011-2022 走看看