[学习笔记] 五分钟快速理解字符集与字符编码的区别

版权声明:Powered by Hibiki Copyright None https://blog.csdn.net/xHibiki/article/details/83933663

字符集

字符集,也称作字符编码方案,是为字符集合中每一个字符分配一个唯一ID的编码字符集.包括了Unicode,ASCII,ANSI等字符集。

Unicode字符集所有字符组成的字符集
国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。如果全世界每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。这就是Unicode,就像它的名字都表示的,这是一种所有符号的编码。

ASCII字符集西文字符集
美国国家标准学会(American National Standard Institute , ANSI )制定的,标准的单字节字符编码方案,用8位表示256种可能的字符,包含所有的大小写字母,数字0~9,标点符号与特殊控制符号。

ANSI字符集西文字符+不同语言文字的字符集
为使计算机支持更多语言,使用1 个字节来表示 1 个英文字符(标准的ASCII字符集)。超出此范围的语言文字使用0x80~0xFFFF来编码,即扩展的ASCII编码。不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码方案/标准。
例如:
GBK、GB2312简体字符集
Big5繁体字符集
GB18030汉字、日文假名、朝鲜语和中国少数民族文字大字符集
Shift_JIS日语字符集

字符编码

字符编码是字符集的编码实现或者编码规则,每个已经编好码的字符对应到字符集的一个独立的位置上.
分为定长编码可变长编码(节约编码).
编码形式有单字节编码,双字节编码,混合字节编码等.(1byte=8bit)
例如:
字符A用ASCII单字节定长编码0100 0001,
但是汉字数量超出了ASCII编码范围(最多28=256个字符),
所以用Unicode编码(最多216=65536个字符),表示原本无法表示的汉字,
例如字符’知’用Unicode双字节定长编码0111 0111 1110 0101,字符A表示为0000 0000 0100 0001
但是,原本可以用一个字节存储的英文字母,现在变成两个字节,如果文档的英文字母很多的话就产生了浪费.
所以产生了避免浪费的可变长混合编码方式:UTF-8,规则是:英文字母编码为1个字节,汉字字符则是3个字节(详细请参考相关文档)

常见字符编码
基于Unicode字符集的字符编码:Unicode,UTF-8,UTF-16,UTF-32
基于ASCII字符集的字符编码:ASCII
基于ANSI字符集的字符编码:GB2312、GBK、GB18030、Big5、Shift_JIS

容易混淆的概念

Q: 为什么Unicode在概念上既是字符集又是字符编码?
A: 实际上Unicode=Unicode字符集+Unicode(定长编码)+UTF-8,UTF-16等字符编码的总称
Unicode编码是Unicode字符集的完整实现,即用两个字节表示字符集中的一个独立字符,而UTF-8是Unicode字符集的可变长编码的实现. 所以Unicode,ANSI,ASCII都是广义表示,必须加上字符集或者编码规则来区分概念.

Q: 可以用实例说明一下Unicode编码和UTF-8编码的区别吗?
A: 假如记事本输入中包含以下信息:
在这里插入图片描述
保存时,选择保存为Unicode和UTF-8两个文本
在这里插入图片描述
查看文件大小,就可以发现Unicode编码的大小比UTF-8编码大了13字节,这是因为
Unicode: 10x2(数字)+7x2(字母)+3x2(汉字)+1x2(不可见的回车符)=42字节
UTF-8: 10x1(数字)+7x1(字母)+3x3(汉字)+1x3(不可见的回车符)=29字节
Unicode
UTF-8

猜你喜欢

转载自blog.csdn.net/xHibiki/article/details/83933663