• PythonStudy——字符编码 Character Encoding


    测试一下
    学习字符编码的问题:解决乱码问题

    数据 从 硬盘 => 内存 => 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

    # 学习的结晶:编码与解码要统一编码
    # 操作文本字符

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


    res = b'xe5x91xb5xe5x91xb5'.decode('GBK') # 解码:将二进制字符串转化为普通字符串
    print(res)
    # 输出: 鍛靛懙

    res = b'xe5x91xb5xe5x91xb5'.decode('utf-8')
    print(res)
    # 输出: 呵呵
     


    字符编码:
    编码表:人能识别的符号与机器能识别的符号(01组成的二进制码)映射关系
    py2:ASCII,常用ASCII表只有英文、数字、英文符号与与机器能识别的符号的对应关系
    py3:utf-8,是unicode编码表的一种实现方式,采用变长存储数据,字母数字简单符号1个字节,中文3~6字节

    utf-8: 变长,在英文数字较多时,更节省空间,用于传输,cpu与硬盘中采用的编码格式
    utf-16: 定长,英文数字汉字都是采用2个字节,读存效率高,内存中采用的编码格式

    gbk => utf-8: 转码
    普通字符串 => 二进制字符串:编码,目的是用于传输数据 'abc'.encode('utf-8')
    二进制字符串 => 普通字符串:解码,目的是用于显示数据 b'abc'.decode('utf-8')

     
  • 相关阅读:
    Pig Latin-freecodecamp算法题目
    Search and Replace -freecodecamp算法题目
    Where art thou-freecodecamp算法题目
    Roman Numeral Converter-freecodecamp算法题目
    Diff Two Arrays-freecodecamp算法题目
    Asp.Net前台调用后台变量
    ASP.NET获取前端页面的Html标签的值
    echart 设置图例图标形状
    解决tableexport导出到excel中有关中文乱码的问题
    C# Async与Await用法
  • 原文地址:https://www.cnblogs.com/tingguoguoyo/p/10752950.html
Copyright © 2020-2023  润新知