字符编码

Posted zhubincheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符编码相关的知识,希望对你有一定的参考价值。

一、字符编码介绍

内容参考: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

 

以上是关于字符编码的主要内容,如果未能解决你的问题,请参考以下文章

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

InputStream的三个read的区别

《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片

使用非utf-8编码在Python中解析XML

带有神秘附加字符的 Javascript Date getTime() 代码片段

以下代码片段 C++ 的说明