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

    字符编码

    什么是字符编码?

    人类能识别的是字符等高级标识符,电脑只能识别0,1组成的标识符,要完成人与机器之间的信息交流,一定需要一个媒介,进行两种标识符的转化(两种标识符的对应关系),这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码;对应关系形成的结构称之为:编码表。

      很明显,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),如何能让计算机读懂人类的字符?
    
      必须经过一个过程:
      #字符--------(翻译过程)------->数字 
    
    • CPU:将数据渲染给用户,中央处理器
    • 内存:临时存放数据,断电后消失
    • 硬盘:永久存储数据,断电后还有
    软件打开文件读取数据的流程:
    1. 打开软件
    2. 往计算机发送一个打开文件的指令,来打开文件
    3. 读取数据渲染给用户(如果存数据与读数据采用的编码表不一致就会产生乱码)
    
    python解释器打开py文件
    1. 打开软件(python解释器)
    2. 往计算机发送一个打开文件的指令,来打开文件
    3. 逐行解释打开的文件内容(存取编码不一致,无法正常解释,崩溃),将执行结果展示给用户
    
    释失败的原因:
    py2默认按ASCII来解释文件内容 | py3默认按UTF-8来解释文件内容
    
    文件头:# encoding: 编码表
    功能:告诉py解释器按照什么编码来解释文件内容
    

    了解

    '''
    编码表:
    人能识别的字符标识符 与 计算机能识别的01标识符 的对应关系
    
    万国编码:Unicode utf-8
    1. 采用的都是Unicode编码表
    2. Unicode以定长(2字节)存取数据
    3. utf-8以变长(1-6字节)存取数据(英文1字节,汉字3-6字节)
    
    '''
    

    重点

    unicode与utf-8什么关系
    unicode:用2个字节来存储汉字,用2个字节来存储英文字母,占有空间较多,读取效率极高
    utf-8:用3-6个字节来存储汉字,用1个字节来存储英文字母,占有空间较少,读取效率低
    总结:内存都是按unicode存储数据,硬盘和cpu采用utf-8来存取数据

    unicode与utf-8采用的是一张unicode编码表,utf-8是unicode编码表的体现方式,变长存储数据
    变长优点:(大量数据都是以英文存在,所以utf-8空间更小)传输速度更快

    编码解码

    # unicode字符串,默认字符串
    s1 = u'abc你好
    不好'
    print(s1)
    输出:abc你好
    	 不好
    
    # 字节字符串
    s2 = b'abc123xb7xb7'
    print(s2)
    输出:b'abc123xb7xb7'
    
    # 原义字符串: 不对字符串内部做任何操作(eg:
    的转化)
    s3 = r'abc你好
    不好'
    print(s3)
    输出:abc你好
    不好
    
    # 编码与解码
    s = '123呵呵'
    n_b = bytes(s, encoding='utf-8')
    print(n_b)
    输出:b'123xe5x91xb5xe5x91xb5'
    
    b = b'123xe5x91xb5xe5x91xb5'
    n_s = str(b, encoding='GBK')
    print(n_s)
    输出:123鍛靛懙
    
    # 将u字符串编码成b字符串
    print(u'你好'.encode('utf-8'))
    输出:b'xe4xbdxa0xe5xa5xbd'
    
    # 将b字符串解码成u字符串
    print(b'xe4xbdxa0xe5xa5xbd'.decode('utf-8'))
    输出:你好
    
    u''和 b''之间转化
    编码:u''.encode('utf-8') | bytes(u'', encode='utf-8')
    解码:b''.decode('utf-8') | str(b'', encode='utf-8')
    
    
  • 相关阅读:
    路由器默认密码
    目前网络安全的攻击来源
    SQL注入——时间盲注
    UNIX网络编程第4章4.5listen函数4.6accept函数
    UNIX网络编程第3章套接字编程简介3.2套接字地址结构3.3值结果参数3.4字节排序函数
    Ubuntu软件系列---如何安装deb安装包
    Ubuntu软件系列---添加实时网速
    Ubuntu软件系列---网易云
    4.9 TF读入TFRecord
    4-8 使用tf.train.string_input_producer读取列表样本
  • 原文地址:https://www.cnblogs.com/linwow/p/10693791.html
Copyright © 2011-2022 走看看