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

    字符编码

    启动应用程序:

    1.双击qq

    2.操作系统接收指令,然后把该操作转化为0和1发送给CPU

    3.CPU接收指令然后把指令发送给内存

    4.内存接收指令把指令发送给硬盘获取数据

    5.qq在内存运行

    写文本的流程

    1.在记事本中按下键盘中j的时候

    2.记事本和操作系统交互,把这个按下j的指令转化为0和1

    3.操作系统发送指令给CPU

    4.CPU说吧这个0和1的指令转化为j

    5.然后再由显示器显示

    • 期间发送的转化过程我们称之为字符编码

    j--->0和1 #存储

    0和1---> j #取

    统称为字符编码

    python解释器的原理

    1.启动python解释器,python解释器相当于一个文本编辑器00000

    2.打开文件,读出文件内容,python解释器相当于一个文本编辑器,--->发生了字符编码,name='nick'

    3.python解释器解释name ='nick',然后才有了语法的概念--->发生了字符编码00000

    001001101001000101010(硬盘中)---->name ='nick'(内存)--->开辟一块内存空间--->0000001010101001010

    python解释器和文本编辑器的区别

    1.都能干什么:

    ​ A.把硬盘中躺着的数据读入到内存中,并显示

    2.不同:

    ​ A.python解释器还会执行解释的步骤

    字符编码发生在哪三个阶段

    1.存 内存到硬盘

    2.取 硬盘到内存

    3.python3解释器的解释

    最早的电脑只认识英文,

    00001-a 00002-b 00003-中

    256个足够他们用了

    0 1

    00 a 01 b 10 c 11 d

    8位二进制位作为一个对应表,称为ASCII表

    unicode的转换

    中 0000111100001111 a 00001111

    内存 unicode转换 硬盘

    0000111100001111000011110 - a - 00001111
    0000111100001111000111111 - 中 - 000011110000111

    utf8的出现只是为了节省空间,把这个00000000 01000001改成01000001存到内存中

    1.电脑是美国创造出来的,电脑只认识0和1,但是美国人想输入一个a字符进去,所以必须得建立一套字符编码,让00001111表示a,建立一套ascii码表

    2.但是其他国家也开始使用电脑了,ascii码表不能满足需求了,所以各个国家建立了自己的字符编码表

    3.中国的是gbk,日本的是ift,韩国的是uck,所以各个国家的码农都用自己国家的编码表写了各种各样的代码

    4.突然某个韩国人想说某个日本人的代码是自己写的,但是把日本人的代码放到自己的电脑上运行会报错,一下就被揭穿了,所以这个韩国人站出来说,我要弄一套编码表,这个编码表不仅能兼容日本,还能兼容世界的,然后最终没能实现

    5.突然有一个超级英雄站出来说,我来帮你吧,然后unicode横空出世,unicode能认识所有国家的字符

    6.然后可以使用unicode的编码保存到硬盘中取,但是发现unicode编码太浪费内存了,然后做出了一套精简的utf8编码

    7.等哪一天硬盘中躺着的全是utf8的编码的代码,那么unicode就下岗了

    • 上述说到的报错其实就是乱码,怎样才能解决乱码

    存的时候用什么编码,取的时候用什么编码(必考)

    内存中的编码格式统一就是unicode

    从内存到硬盘的过程,即unicode--->gbk称为encode

    从硬盘到内存的过程,即gbk--->unicode称为解码decode

    python2与python3解释器编码的区别

    python2(了解)

    解释语法的时候,生成变量时会把这个字符丢入到内存中,这个时候会有两种情况,一种是str编码,一种是unicode编码

    str

    直接编码成gbk的形式

    unicode

    直接编码成unicode的形式

    python3

    pycharm右下角控制的是你写入的代码字符以什么编码格式保存

    coding:utf-8控制的是python3作为文本编辑器的时候,以什么编码格式读取文本内容,python3默认是utf-8的形式读取字符

    python解释器的语法

    解释定义变量的语法,会新开辟一块内存空间放入这个变量,然后这个变量在python3中以unicode的形式存储,如字符 x='中',被python3解释后在内存中会变成x=1010101010101100,理论上print(x)相当于输出1010101010101100,但是1010101010101100对于程序员来讲看不懂,所以python3创始人龟叔作了这个操作,把1010101010101100编码按终端的编码格式输出到编码后的结果上,如.

    解释定义变量的语法,会新开辟一块内存空间放入这个变量,然后假设这个变量在python3中以utf-8的形式存储,如字符x=中,被python3解释后在内存中会变成x=000001101010.理论上print(x)相当于输出000001101010,但是这个000001101010对于程序员来讲看不懂,所以pyhon3创始人龟叔作了这个操作-把000001101010编码按终端的编码格式输出编码后的结果,如,如果终端的编码格式是gbk,终端无法识别000001101010,所以新开辟空间放入变量的时候,就用unicode转换,则终端无论是什么编码格式,都能够识别打印。

    乱码分析

    乱码的两种情况:

    • 乱码一:存文件时就已经乱码

    存文件时,由于文件内容有各个国家的文字,我们单以shiftjis去存,本质上其他国家的文字由于在shiftjis中没有找到对应关系而导致存储失败。但当我们硬要存的时候,编辑并不会报错(难道你的编码错误,编译器这个软件就跟着崩溃了吗???),但毫无疑问,不能存而硬存,肯定是乱存了,即文件阶段就已经发生乱码,而当我们用shiftjis打开文件时,日文可以正常显示,而中文就乱码了。

    总结

    1、保证不乱码的核心法则就是,字符按照什么标准编码的,就要按照什么标准解码,此处的标准指的就是字符编码

    2、在内存中写的所有字符,一视同仁,都是unicode编码,比如我们打开编译器,输入一个“你”,我们并不能说“你”就是一个汉字,此时它仅仅只是一个符号,该符号可能很多国家都在使用,根据我们使用的输入法不同这个字的样式可能也不太一样。只有我们往硬盘保存或者是基于网络传输时,才能确定“你”到底是一个汉字,还是一个日本字,这就是unicode转换成其他编码格式的过程了。简而言之,就是内存中固定使用使用的就是unicode编码,我们唯一能改变的就是存储到硬盘时使用的编码。

    • Unicode---------->encode(编码)---------->gbk
    • Unicode---------->decode(解码)----------->gbk

    Never,Never,Never give up.
  • 相关阅读:
    Python基本数据类型
    DNS服务
    在浏览器地址栏输入百度网址之后的故事(面试必考)
    C++对象的赋值和复制
    C++区别于其他语言的知识点总结
    SQL连接查询(最全面)
    源码堆栈信息保存 到此一游
    linux 内核调试之关键函数名记要
    记几个命令 转
    JS 奇淫巧技 转
  • 原文地址:https://www.cnblogs.com/zuihoudebieli/p/10940124.html
Copyright © 2011-2022 走看看