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

    一、字符编码介绍

    内容参考:https://zhuanlan.zhihu.com/p/108805502 egon老师

    1.1 什么是字符编码

      计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1对应高电平,二进制数0对应低电平),关于磁盘的磁特性也是同样的道理。结论:计算机只认识数字
    
      很明显,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),如何能让计算机读懂人类的字符?
    
      必须经过一个过程:
      #字符--------(翻译过程)------->数字
    
      #这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码

    1.2 字符编码的应用场景

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

    1.3 字符编码的发展

    第一阶段:ASCII码

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

    第二阶段:GBK、shift-JIS....

    此时,美国人用的计算机里使用字符编码标准是ASCII、中国人用的计算机里使用字符编码标准是GBK、日本人用的计算机里使用字符编码标准是Shift_JIS,如下图所示,

    上图原理如下:

    文本文件内容全都为字符,无论存取都是涉及到字符编码问题
    #1、存文本文件
    人类通过文本编辑器输入的字符会被转化成ASCII格式的二进制存放于内存中,如果需要永久保存,则直接将内存中的ASCII格式的二进制写入硬盘
    
    #2、读文本文件
    直接将硬盘中的ASCII格式的二进制读入内存,然后通过ASCII表反解成英文字符

    GBK编码格式:

    # GBK表的特点:
        1、只有中文字符、英文字符与数字的一一对应关系
        2、一个英文字符对应1Bytes
           一个中文字符对应2Bytes   
           补充说明:
           1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符
           2Bytes=16bit,16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符

    第三阶段:Unicode

    #1. 存在所有语言中的所有字符与数字的一一对应关系,即兼容万国字符
    
    #2. 与传统的字符编码的二进制数都有对应关系,详解如下

    文本编辑器输入的字符最先都是存于内存之中,在内存之中我们统一使用Unicode。存放于硬盘时,则将Unicode转换成所需格式。

    # 英文字符可以被ASCII识别
    英文字符--->unciode格式的数字--->ASCII格式的数字
    
    # 中文字符、英文字符可以被GBK识别
    中文字符、英文字符--->unicode格式的数字--->gbk格式的数字
    
    # 日文字符、英文字符可以被shift-JIS识别
    日文字符、英文字符--->unicode格式的数字--->shift-JIS格式的数字

    二、编码解码

    encode

    decode

     详细介绍可参考:https://zhuanlan.zhihu.com/p/108805502

    三、字符编码的应用

    3.1 保存字符

      保存时,我们需注意,若存在中文,但是以shift-JIS编码的格式存入,则中文部分甚至整个文本数据将存成乱码。此时数据将会丢失,无法还原。

    3.2 取出代码

     3.3 执行程序时字符串存储

    预知详情:

    (轻量版)https://zhuanlan.zhihu.com/p/108805502

    (史上最全版)https://www.cnblogs.com/linhaifeng/articles/5950339.html

  • 相关阅读:
    跨域
    redis安装
    iframe操作
    element-ui 合并相邻的相同行 span-method
    函数实现 a?.b?.c?.d
    git 使用流程 命令
    svg用作背景图
    js中的位运算符 ,按位操作符
    二十三种设计模式[23]
    二十三种设计模式[22]
  • 原文地址:https://www.cnblogs.com/zhubincheng/p/12482815.html
Copyright © 2011-2022 走看看