字符编码的总体认识及若干问题

本文深入浅出地介绍了字符、字符集、字符编码等基本概念,并详细解析了ASCII、GB2312、GBK、GB18030、Unicode、UCS-2、UCS-4及其编码实现如UTF-8、UTF-16、UTF-32的区别与发展历程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.首选得弄明白一些概念,如下:

字符(Character)

一个文字就是一个字符。在计算机中,字符是用数字来表示的,不同的文字用不同的数字表示。

字符集(Character Set)

既然是“集”,也就是“集合”,“字符集”自然就是“一定量字符的集合”。

一个字符集包含了固定数量的字符,如ASCII字符集包含A-Z、a-z、0-9、半角标点符号和特殊控制符号(如换行符)在内的128个字符。

字符编码(Encode)

编码,意思是指将数据通过一定方式表达或储存,这个方式就叫编码。所以字符编码就是字符的表现、储存方式,也就是字符集的实现方式。

 

代码页(code page)

是每一种编码方式的代号。这 是对照表:http://wenku.baidu.com/link?url=Aycytp_L-ogY1kPWq_Fc02sYrbpmPoIP-jPU6nfr73-Ap0nHYOEm2rShqS8Xiq3-k0NDgKpyoIijZY1yUwPG-ydXGJSYAan8X_rLP9Z5mBu

 

从上可以看出,字符集是字符的集合,字符编码是把字符集的实现方式。但需要注意的是:有的字符编码和字符集的名称是一致的。


 

 

二.然后来看一幅我总结的图:


首选是ASCII码然后发展为EASCII,它们没有字符集和编码格式的区别。

然后中国人发明了自己的汉字表示法--GB2312,之后又对它进行了扩充产生了GBK,它们的代码页都是cp936。再后来又产生了GB18030,对GBK再次进行了扩充,貌似还能表示日语和韩语,代码页是cp52936。这些的字符集和编码方式命名相同。

世界人发明通用字符表示法—Unicode/UCS,它又分为UCS-2和UCS-4,注意这只是字符集,是一张字符和序号对应的表而已。UTF-8/UTF-16/UTF-32才是各种编码实现,当然Unicode的编码方式还有其他实现。

 

Unicode和UCS区别:原来它们是由两个不同组织开发的,不过后来它们意识到了合并的必要性,于是现在基本没区别了。

 

UCS-2和UCS-4区别:前者用两个字节表示,后者用4个字节表示,因此后者比前者容量更大。UTF-8和UTF-16就是UCS-2的实现,UTF-32是UCS-4的实现。

 

混淆点:UTF-8不是UCS-2的实现吗,怎么有些字符编码占了3个字节?这里的8不是指每个字符用8位表示,而是传输是按8位传。至于为什么占3个字节,前面说过UCS-2是字符集,它用16位编码,但是没有限定具体实现方式用什么方式保存和传输,故UTF-8用1~3个字节保存或者传输。

 

以上只是个人理解,但实际上我也根据自己的理解解决了很多实际遇到的问题。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值