• 20190917 字符编码


    0917 字符编码及处理

    1.字符编码

    因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295

    由于计算机美国人发明的,最早只有127个字符编码至计算机,这个编码叫ASCIL编码。

    但处理中文至少用两个字节还不能和ASCIL编码冲突,所以制定了GB2312(后来变成GBK编码)编码。(日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准)

    统一编码(Unicode)

    Unicode将所有语言都统一编码至一套里,不会有乱码问题。

    但ASCII编码是1个字节,而Unicode编码通常是2个字节。

    字母A用ASCII编码是十进制的65,二进制的01000001;
    
    字符0用ASCII编码是十进制的48,二进制的00110000,注意字符'0'和整数0是不同的;
    
    汉字中已经超出了ASCII编码的范围,用Unicode编码是十进制的20013,二进制的01001110 00101101。
    
    你可以猜测,如果把ASCII编码的A用Unicode编码,只需要在前面补0就可以,因此,A的Unicode编码是00000000 01000001。
    

    这样一来,整个存储空间就多了一倍

    出现UTF-8编码

    这是一种‘可变长的编码’。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。

    字符 ASCII Unicode UTF-8
    A 01000001 00000000 01000001 01000001
    x 01001110 00101101 11100100 10111000 10101101

    记事本编辑时

    会将读取的UTF-8字符转换成Unicode字符到内存中,编辑完成后,保存时再把Unicode字符转换为UTF-8保存在文件。

    编码和解码

    unicode编码 ---》(编码) utf8 从内存到硬盘

    utf8 --》(解码) unicode 从硬盘到内存

    现在内存只有unicode编码

    python解释器,解释代码的流程

    1.python解释器相当于文本编辑器,启动编辑器读入字符

    ​ python2默认的是ASCIL,python3默认UTF-8

    中文  # gbk编码的中文加
    

    2.==》识别代码 ==》print才能输出 ==》语法有没有问题

    # coding : gbk   
    # 告诉python解释器用gbk去完成第一步,读入字符
    

    3.== 》产生结果==》跑到终端--》字符编码

    终端有一个特性:你的电脑是什么编码,就按什么编码来,Windows终端是GBK.

    python2和python3的编码区别

    python2

    python2 有两种存储变量的形式,第一种:unicode;第二种:按照coding头设定来的

    假设python2用utf8存储x='中文',当你print(x)的时候,终端接收gbk的变量x,但是windows终端编码是utf8,会乱码

    假设python2用unicode存储,终端接受的是unicode,windows终端编码是utf8还是gbk重要吗?不会乱码=

    python3

    python3只有一种存储变量的形式,unicode

    python3用unicode存储,终端接收的是unicode,widonws终端编码是utf还是gbk不重要,不会乱码

    终端的编码是GBK
    文件的编码的gbk或utf-8
    
    当python读取文件时。
    第一步打开编辑器
    
    第二部开始打开文件
    #  这时需要变化编码,用unicode保存在内存中(python3)或者用字头coding 来指定(python2),不然会乱码
    第三部输出到终端
    #  如果是unicode编码不需要改变,终端是GBK,如果是其他指定编码就会报错,
    
  • 相关阅读:
    Django+xadmin打造在线教育平台(八)
    Django+xadmin打造在线教育平台(七)
    Django+xadmin打造在线教育平台(六)
    Django+xadmin打造在线教育平台(五)
    Django+xadmin打造在线教育平台(四)
    Django+xadmin打造在线教育平台(三)
    Django+xadmin打造在线教育平台(二)
    Cognos组织架构介绍
    Echarts 的悬浮框tooltip显示自定义格式化
    Echarts中axislabel文字过长导致显示不全或重叠
  • 原文地址:https://www.cnblogs.com/fwzzz/p/11534349.html
Copyright © 2020-2023  润新知