• 10.字符编码


    字符编码

    1.计算机基础

    应用程序任何操作硬件的请求都会向操作系统发起系统调用,然后由操作系统去控制硬件。

    2.文本编辑器存取文件的原理

    1. 打开编辑器就打开了启动了一个进程,是在内存中的,所以,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失。
    2. 要想永久保存,需要点击保存按钮:编辑器把内存的数据刷到了硬盘上。
    3. 在我们编写一个py文件(没有执行),跟编写其他文件没有任何区别,都只是在编写一堆字符而已。

    3.Python解释器执行py文件的原理

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

    4.Python解释器与文本编辑器的异同

    • 相同点:Python解释器是解释执行文件内容的,因而Python解释器具备读py文件的功能,这一点与文本编辑器一样。
    • 不同点:文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会Python的语法,而Python解释器将文件内容读入内存后,可不是为了给你瞅一眼Python代码写的啥,而是为了执行Python代码、会识别Python语法。

    5.字符编码介

    a.什么是字符编码?

    ​ 字符编码是将人类的字符编码成计算机能识别的数字,这种转换必须遵循一套固定的标准,该标准无非是人类字符与数字的对应关系,称之为字符编码表。

    b.涉及到字符编码的2个场景

    1. 一个Python文件中的内容是由一堆字符组成的,存取均涉及到字符编码问题(Python文件并未执行,前两个阶段均属于该范畴)。
    2. Python中的数据类型字符串是由一串字符组成的(Python文件执行时,即第三个阶段)。

    c.字符编码发展史与分类

    ​ 计算机由美国人发明,最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。

    ​ 然而还有许多其他国家的语言需要编码,如果没有对应的编码,则会出现乱码。所以需要能包含全世界的语言一个标准,于是产生了Unicode码。

    ​ ascii用1个字节(8位二进制)代表一个字符;Unicode常用2个字节(16位二进制)代表一个字符,生僻字需要用4个字节。

    ​ 本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8(Unicode Transformation Format-8)编码。

    ​ 但是内存中必须使用Unicode的编码,因为Unicode能和硬盘中其他国家的二进制中的代码进行转换,但是UTF-8只是简化了代码的存储,它并不能与其他国家硬盘中的代码进行转换。

    d.乱码

    ​ 存文件时就已经乱码:当用日本的编码写入中文,则在存文件时就已经发生乱码

    ​ 存文件时不乱码而读文件时乱码:当存文件时用utf-8编码,读文件时用了错误的编码,比如gbk,则会出现乱码。但可以改变读时编码让乱码消失。

    e.总结

    ​ 所以保证不乱码的核心法则就是,字符按照什么标准而编码的,就要按照什么标准解码,此处的标准指的就是字符编码。

  • 相关阅读:
    git使用记录
    【转】话说我打算一天学完object c语法,系列1--------来自书Objective-c程序设计
    【转】看源代码那些事
    中英文对照 —— 数学定律定理(公式及其描述)
    CUDA+OpenGL混合编程
    简明欧洲史
    简明欧洲史
    CUDA一维纹理内存
    CUDA中的常量内存__constant__
    CUDA线程协作之共享存储器“__shared__”&&“__syncthreads()”
  • 原文地址:https://www.cnblogs.com/yellowcloud/p/10932609.html
Copyright © 2020-2023  润新知