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='jack'
    3.python 解释器解释 name='jack',然后才有语法的概念->发生了字符编码00000

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

    1.都能干什么
    A.把 硬盘中的数据读入到内存中,并显示
    2.不同之处
    B.python解释器还会执行解释的步骤

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

    1.存 内存到硬盘
    2.取 硬盘到内存
    3.python3解释器解释
    存的时候用什么编码,取得时候就用什么编码
    内存中的编码统一都是Unicode

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

    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对于程序员来讲看不懂,所以python3创始人龟叔做了这个操作-把000001101010编码按终端的编码格式输出编码后的结果,如上.如果终端的编码为gbk,终端无法识别000001101010.所以新开辟空间放入变量的时候,就用unicode转换,则终端无论是什么形式的编码格式,都能够识别并打印.

    乱码分析

    首先明确概念

    文件从内存刷到硬盘的操作简称存文件
    文件从硬盘读到内存的操作简称读文件
    乱码的两种情况:

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

    乱码二:存文件时不乱码而读文件时乱码
    存文件时用utf-8编码,保证兼容万国,不会乱码,而读文件时选择了错误的解码方式,比如gbk,则在读阶段发生乱码,读阶段发生乱码是可以解决的,选对正确的解码方式就ok了。

    总结

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

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

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

  • 相关阅读:
    webpack4配置详解之常用插件分享
    eslint 配置
    获取数组的随机数
    封装一个拖拽
    R语言常用语法和用法
    关于异或操作和它的算法题
    算法题:整形数组找a和b使得a+b=n
    最小生成树的一些证明
    python multiprocessing 使用
    python decorator的本质
  • 原文地址:https://www.cnblogs.com/bladecheng/p/10932608.html
Copyright © 2011-2022 走看看