zoukankan      html  css  js  c++  java
  • 第七章 字符编码

    1.字符编码

    数据 从 硬盘 => 内存 => cpu
     应用程序打开文本文件的三步骤
     1.打开应用程序
     2.将数据加载到内存中
     3.cpu将内存中的数据直接翻译成字符显示给用户

     python解释器
     1.打开python解释器
     2.将数据加载到内存中
     3.cpu将内存中的数据解释执行将结果显示给用户,如何解释执行不能通过,将错误信息提供给用户

     编码的发展史
     电脑只能识别高低电平对应的0,1信息 => 问题:如何将世间万物信息存放到内存中
     世间万物信息 => 0,1形式的数据 => 电脑中存放,将该过程逆向操作,就是访问已存储的数据信息

     编码表
     人能识别的字符 <=> 机器能识别的字符:一定存在一种固定的对应关系
     编码表:一定范围内人能识别的字符与机器能识别的字符形成的对应关系表(映射表)

     1.   ASCII表:英文字母、英文符号、数字与机器能识别的字符的对应关系表,8个二进制位就能存放完这所有的对应关系 => 1字节
           python2采用的默认编码是ASCII,早期并不支持中文编程
     2_1.  GBK:中文与与机器能识别的字符的对应关系表(完全兼容ASCII表),16个二进制位能存放所有汉字与ASCII之前的对应关系 => 2个字节
           2个字节能否存放常用汉字 => 16个二进制位 2^15
            print(pow(2, 15))
     2_2.  Shift_JIS | Euc-kr:日文 | 韩文 与机器能识别的字符的对应关系表(完全兼容ASCII表)

             乱码:存的编码格式与取的编码格式不一致
     3.  Unicode万国码:世间中常用国家的常用字符与机器能识别的字符的对应关系表

     转码:Unicode存在汉字与二进制对应关系,GBK也存在汉字与二进制对应关系,将GBK存放的数据转存到Unicode数据

                均采用Unicode编码表,只是存放数据采用字节数不一致,utf-8与utf-16是Unicode编码表的两种体现方式
     utf-8:以1个字节存放英文,以3 或 (|)6个字节存放汉字,在英文数据过多时,更深空间,用来传输效率更高
     utf-16:所有支持的符号都采用2个字节存放,读存数据采用定长,不用计算,读存效率高

                   硬盘到内存需要数据的传输,内存到CPU需要数据的传输,所有都采用utf-8
                   内存需要高速读写,采用utf-16

     

    4.    学习的结晶:编码与解码要统一编码

     操作文本字符
    res = "汉字呵呵".encode('utf-8') # 编码:将普通字符串转化为二进制字符串
    print(res) # b'xe6xb1x89xe5xadx97xe5x91xb5xe5x91xb5'

    res = b'xe5x91xb5xe5x91xb5'.decode('GBK') # 解码:将二进制字符串转化为普通字符串
    print(res) # 鍛靛懙 乱码了
    res = b'xe5x91xb5xe5x91xb5'.decode('utf-8')
    print(res) # 呵呵 读写编码统一后就不乱码了

  • 相关阅读:
    PAT (Basic Level) Practise 1013 数素数
    PAT (Basic Level) Practise 1014 福尔摩斯的约会
    codeforces 814B.An express train to reveries 解题报告
    KMP算法
    rsync工具
    codeforces 777C.Alyona and Spreadsheet 解题报告
    codeforces 798C.Mike and gcd problem 解题报告
    nginx + tomcat多实例
    MongoDB副本集
    指针的艺术(转载)
  • 原文地址:https://www.cnblogs.com/sry622/p/10738649.html
Copyright © 2011-2022 走看看