字符编码

在早期的编程中,普遍使用ASCII码。这样就会产生一些问题,ASCII码是一个真正的美国标准,它不能很好的解决其他国家的字符。比方说中文显示,汉字的数量远远大于一个字节所能表示的范围。

不过现在我们编程的时候不使用Unicode也可以显示中文。这样使用似乎看起来没有什么坏处,我们在程序上一样显示了中文。可我们确实在用普通的ASCII的字符串函数。如果一个字符串中间有一个中文字符,使用strlen函数我们发现字符串的长度是英文字母个数加上两倍的中文字符个数。

原来Widows使用了一种称为代码页的技术,代码页定义了字符的映射代码。最低的128个代码一般都是相同的。而较高的128个代码则根据代码页的不同被定义为不同的字符。世界上每个地区有相应的代码页,它其实是一个字符映射集。比如我们在安装Windows时,一般使用简体中文。

这个方法在大部分时间都行的通,但是在中国,日本和韩国/朝鲜的象形文字大约有21000个,如何保持这些语言和ASCII的兼容呢?

解决方案的一种,就是双字节字符集(DBCS:double-byte character set)。它最初的128个代码仍然是ACSII,而较高的128个代码中某些代码的出现总是跟随着第二个字节。这两个字节一起定义为一个字符。通常是一个复杂的象形文字。

问题似乎是解决了。但是这向我们的字符串附加了一个限制,只能在正确的代码页上字符串才能被正确的显示。如果不同代码页之间的用户交换数据,或者是更改了计算机的代码页,那么显示就会出现问题。

说到这里,我回想起当时使用英文操作系统的经历,当时在我英文系统下装了一些常用的中文软件,我发现有些软件的菜单显示为乱码,而有的软件却能正确显示。现在回想起来,这其实就是国际化的问题。很显然显示乱码的软件没有支持Unicode,它们在编程中简单的使用了汉字。

 

 

Unicode解决方案,可以看出代码页和DBCS不是很好的解决方案,一些情况下他们甚至十分的笨拙。很自然16位的Unicode出现了。它的原理很简单,它不需要混乱的代码映射和单字节双字节的变换。因为16位可以表示65536个字符,它可以包含几乎世界上所有的字符,数学符号货币等。

明白UnicodeDBSC的区别非常重要。

Unicode每个字符都是16位宽,它不存在8位宽。每个Unicode编码都能准确的定义一个字符。而DBSC有可能是8位也有可能是16位。

Unicode每个编码都唯一的确定一个字符,而DBSC编码的要对应相应代码页才能确定它的字符。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值