• DAY02


    什么是字符编码

    把人类的字符翻译成计算机能认识的数字

    必须经过一个过程:
    字符--------(翻译过程)-------->数字
    这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码
    以下两个场景下涉及到字符编码的问题:
    1. 一个python文件中的内容是由一堆字符组成的(python文件未执行时)
    2. python中的数据类型字符串是由一串字符组成的(python文件执行时)

    字符编码的发展史

    阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII
    ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1种变化,即可以表示256个字符。ASCII最初只用了后七位,127个数字,已经完全能够代表键盘上所有的字符了(英文字符/键盘的所有其他字符)。后来为了将拉丁文也编码进了ASCII表,将最高位也占用了。

    阶段二:为了满足中文,中国人定制了GBK
    GBK:2Bytes代表一个字符
    为了满足其他国家,各个国家纷纷定制了自己的编码。日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里。

    阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。
    于是产生了unicode,统一用2Bytes代表一个字符,2**16-1=65535,可代表6万多个字符,因而兼容万国语言。但对于通篇都是英文的文本来说,这种编码方式无疑是多了一倍的存储空间(二进制最终都是以电或者磁的方式存储到存储介质中的)。于是产生了UTF-8,对英文字符只用1Bytes表示,对中文字符用3Bytes

    需要强调的一点是:
    unicode:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快,缺点是占用空间大。
    utf-8:精准,对不同的字符用不同的长度表示,优点是节省空间,缺点是:字符->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示。
    内存中使用的编码是unicode,用空间换时间(程序都需要加载到内存才能运行,因而内存应该是尽可能的保证快)。
    硬盘中或者网络传输用utf-8,网络I/O延迟或磁盘I/O延迟要远大与utf-8的转换延迟,而且I/O应该是尽可能地节省带宽,保证数据传输的稳定性。

    字符编码的使用

    无论是何种编辑器,要防止文件出现乱码(请一定注意,存放一段代码的文件也仅仅只是一个普通文件而已,此处指的是文件没有执行前,我们打开文件时出现的乱码)。
    核心法则就是,文件以什么编码保存的,就以什么编码方式打开。

    unicode------->encode('utf-8')----->bytes
    bytes--------->decode('utf-8')----->unicode

    python解释器执行py文件的原理

    第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器
    第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:pyhon的解释性,决定了解释器只关心文件内容,不关心文件后缀名)
    第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码(ps:在该阶段,即执行时,才会识别python的语法,执行文件内代码,执行到name="PatHoo",会开辟内存空间存放字符串"PatHoo")

  • 相关阅读:
    实用机器学习 跟李沐学AI
    Explicitly drop temp table or let SQL Server handle it
    dotnettransformxdt and FatAntelope
    QQ拼音输入法 禁用模糊音
    (技术八卦)Java VS RoR
    Ruby on rails开发从头来(windows)(七)创建在线购物页面
    Ruby on rails开发从头来(windows)(十三)订单(Order)
    Ruby on rails开发从头来(windows)(十一)订单(Order)
    新员工自缢身亡,华为又站到了风口浪尖
    死亡汽油弹(Napalm Death)乐队的视频和来中国演出的消息
  • 原文地址:https://www.cnblogs.com/hugengfeng/p/7365702.html
Copyright © 2020-2023  润新知