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