首页 > 其他分享 >字符编码

字符编码

时间:2023-01-17 22:35:03浏览次数:39  
标签:编码 英文 字符 内存 unicode 硬盘

python解释器与文件本编辑的异同如下

#1、相同点:前两个阶段二者完全一致,都是将硬盘中文件的内容读入内存,详解如下
python解释器是解释执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样
 
#2、不同点:在阶段3时,针对内存中读入的内容处理方式不同,详解如下
文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会python的语法,而python解释器将文件内容读入内存后,可不是为了给你瞅一眼python代码写的啥,而是为了执行python代码、会识别python语法)

字符编码表的发展史

阶段一:一家独大

现代计算机起源于美国,所以最先考虑仅仅是让计算机识别英文字符,于是诞生了ASCII表

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

image

阶段二:群雄割据

为了让计算机能够识别中文和英文,中国人定制了GBK

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

每个国家都各自的字符,为让计算机能够识别自己国家的字符外加英文字符,各个国家都制定了自己的字符编码表

# Shift_JIS表的特点:
	1、只有日文字符、英文字符与数字的一一对应关系
 
# Euc-kr表的特点:
	1、只有韩文字符、英文字符与数字的一一对应关系

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

字符编码发展到了这个阶段,可以用一句话概括:诸侯割据、天下大乱,详解如下

下左图中,文本编辑存取文件的原理如下

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

image

上右图都是相同的过程,此时无论是存还是取由于采用的字符编码表一样,所以肯定不会出现乱码问题,但问题是在美国人用的计算机里只能输入英文字符,而在中国人用的计算机里只能输入中文字符和英文字符....,毫无疑问我们希望计算机允许我们输入万国字符均可识别、不乱码,而现阶段计算机采用的字符编码ASCII、GBK、Shift_JIS都无法识别万国字符,所以我们必须定制一个兼容万国字符的编码表,请看阶段三

阶段三:天下一统

unicode于1990年开始研发,1994年正式公布,具备两大特点:

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

很多地方或老的系统、应用软件仍会采用各种各样传统的编码,这是历史遗留问题。此处需要强调:软件是存放于硬盘的,而运行软件是要将软件加载到内存的,面对硬盘中存放的各种传统编码的软件,想让我们的计算机能够将它们全都正常运行而不出现乱码,内存中必须有一种兼容万国的编码,并且该编码需要与其他编码有相对应的映射/转换关系,这就是unicode的第二大特点产生的缘由

文本编辑器输入任何字符都是最新存在于内存中,是unicode编码的,存放于硬盘中,则可以转换成任意其他编码,只要该编码可以支持相应的字符

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

编码与解码

由字符转换成内存中的unicode,以及由unicode转换成其他编码的过程,都称为编码encode

由内存中的unicode转换成字符,以及由其他编码转换成unicode的过程,都称为解码decode

在诸多文件类型中,只有文本文件的内存是由字符组成的,因而文本文件的存取也涉及到字符编码的问题

字符编码的应用

我们学习字符编码就是为了存取字符时不发生乱码问题:

#1、内存中固定使用unicode无论输入任何字符都不会发生乱码
 
#2、我们能够修改的是存/取硬盘的编码方式,如果编码设置不正确将会出现乱码问题。乱码问题分为两种:存乱了,读乱了
 
#2.1 存乱了:如果用户输入的内容中包含中文和日文字符,如果单纯以shift_JIS存,日文可以正常写入硬盘,而由于中文字符在shift_jis中没有找到对应关系而导致存乱了
 
#2.2 读乱了:如果硬盘中的数据是shift_JIS格式存储的,采GBK格式读入内存就读乱了

总结:

#1. 保证存的时候不乱:在由内存写入硬盘时,必须将编码格式设置为支持所输入字符的编码格式
#2. 保证存的时候不乱:在由硬盘读入内存时,必须采用与写入硬盘时相同的编码格式

标签:编码,英文,字符,内存,unicode,硬盘
From: https://www.cnblogs.com/DragonY/p/17058832.html

相关文章

  • 字符串左旋
    第一种 暴力穷举法#include<stdio.h>#include<string.h>voidleft_move(char*arr,intk){inti=0;intlen=strlen(arr);for(i=0;i<k;i++){intj=0;char......
  • mysql查看、修改数据库字符集
    showVARIABLESlike'character%';character_set_client:客户端请求数据的字符集character_set_connection:客户机/服务器连接的字符集character_set_database:默认数据库的......
  • [oeasy]python0052_ raw格式字符串_单引号_双引号_反引号_ 退格键
    转义字符回忆上次内容最近玩的是\n、\r之外的转义序列\a是␇(bell)\t是水平制表符\v是换行不回车通过16进制数值转义\xhh把(hh)16进制对应的asci......
  • C标准库 | 字符串转整数/浮点数函数汇总
    在日常LinuxC语言开发中,不可避免会用到字符串转整数或者浮点数的操作,例如带参数的​​main​​​函数中,在​​shell​​下对着某个命令输入一组数字参数,这组数字实际上是字......
  • 洛谷 P1098 [NOIP2007 提高组] 字符串的展开
    洛谷链接牛客链接两个平台都过了题目:题解:本题是一道比较硬核的模拟题,思路方面其实问题不大,但是难在模拟情况上面而且测试数据里还包含了一些题目中没有提到的情况,所......
  • python3.10.0字符串基础
    字符串支持索引(下标访问),第一个字符的索引是0。单字符没有专用的类型,就是长度为一的字符串:>>>word='Python'>>>word[0]#characterinposition0'P'>>>word[......
  • 计算机基础 数据类型 流程控制 字符编码
    目录计算机基础数据类型流程控制字符编码一、关于计算机、编程语言、数据类型、及运算符1.关于计算机2.关于进制数3.关于单位换算4.计算机五大组成部分5.计算机三大核心......
  • 基于Matlab模拟LDPC-BP信道编码
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • 使用StringBuilder拼接字符串
    使用StringBuilder拼接字符串/*StringBuilder比String来拼接字符串效率高!@#$需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在......
  • 使用StringBuilder反转字符串
    使用StringBuilder反转字符串importjava.util.Scanner;/*需求:定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法后,在控制台输出结果例如,键盘录入abc,输出结......