ANSI字符集
ANSI字符集是在ASCII字符集的基础上发展来的.它使用8位表示一个字符最大表示256个字符,但是它实际上和ASCII一样只定义了最低的128个标准字符,较高的128个字符为用户自行扩展.微软在此基础上提出了代码页得概念.代码页为不同的国家和地区对ANSI字符集的高128字符进行了扩展,低128字符仍然是标准字符.代码页概念的提出,使得计算机能够描述的字符更多了
虽然基于8位的ANSI字符集加上代码页得概念使得ANSI能够表示更多的字符,能够描述更多的国家和地区的语言,但是在我们东方中国,日本,朝鲜(韩国)我们使用的是象形文字,在我们汉语中汉字的个数至少近5万个,常用的有3000多个,如果用ANSI字符集是无论如何也无法表示出来所有汉字的.正因为如此就出现了另一个字符集
双字节字符集
.双字节字符集(DBCS)双字节字符集低128字符与ANSI标准相同,高128为非标准的,描述其他国家和地区语言符号,象形文字从257个字符开始.第一个字节为一个值为一个128-255之间的数(注:这个数用有符号类型表示就是一个负数)后面跟着第二个字节.这连个字节定义一个字符,就表示一个象形文字,虽然中文,日文,朝鲜文都是象形文字,而且其中有些还是相同的文字,但是显然的这三种语言是不同的.所以在双字节字符集中也是有代码页这个概念的.比如说:代码页932中文,代码页936日文,949朝鲜文,950繁体中文
在双字节字符集中并不是说字符就是用2个字节表示,其中的标准ASCII字符部分是用一个字节表示的,这样的单双字节共存的编码模式就带来了问题.比如说一个包含英文字母和汉字的字符串,字符串中的字符数就不能从字符串的长度上直接计算出来.这需要经过分析其数据才能计算出来.由此我们不难看出双字节字符集也不能解决多种语言字符的问题.
UNICODE字符
很明显的我们面临的问题是世界上的书写语言无法用256个8位代码来表示.即使是双字节字符集能够表示复杂的象形文字,但是这个方法是笨拙的.而且给编程也带来了麻烦.
什么才是更好的解决方案呢?
我们编程的时候都遇到过这个问题,如果我们想描述一个数8位不够用,我们就是用16位去描述.那么同样的字符的问题也可以如此解决,既然8位无法描述所有的书写语言,那么我们为什么不考虑是用16位来描述呢?事实上我们已经在这么做了,这就是所谓的UNICODE字符集.
首先我们应该明白UNICODE字符与双字节字符的区别.在UNICODE中我们使用16位来表示字符,注意所有的字符都是16位表示的.而双字节字符我们还是处理8位的数据(ASCII标准部分是8位的;象形文字部分虽然是16位,实际上我们也是按2个8位去处理).
双字节字符串非常杂乱,但是UNICODE则显得更加的有秩序,因为所有的都是用16位来描述.在这里有必要简单的描述下UNICODE字符集中的内容.UNICODE字符集:前128个字符,也就是从
0x0000-0x007f是标准的ASCII字符,接下来的128个(0x0080-0x00ff)是 ISO-8859-1对ASCII的扩展.希腊字母使用从0x0370-0x3ff的代码,斯拉夫语使用从0x0400-0x4ff的代码,美国使用从
0x530-0x58f的代码,希伯来语使用从0x590-0x5ff的代码.中国,日本,韩国的象形文字(总称CJK)占用了从0x3000-0x9fff的代码.
UNICODE最大的好处就是只有一个字符集,那么它有缺点吗?当然有,UNICODE占用内存时ASCII的2倍,也许更大的问题是目前很多人都不习惯UNICODE.但是作为一个编程人员来说我们有我们的工作.
未来操作系统的发展方向很明显的是UNICODE无疑.UNICODE未来将给我们带来更多的好处.
你的程序在简体中文系统上开发的,能够让它不做任何修改正常的运行在繁体中文系统上吗?不能的话就请使用UNICODE吧.
ANSI 与 UNICODE 维护单一的源代码
我们都知道,如果我们使用传统的方法在简体中文系统上开发一个程序,然后把它拿到繁体中文
ANSI字符集是在ASCII字符集的基础上发展来的.它使用8位表示一个字符最大表示256个字符,但是它实际上和ASCII一样只定义了最低的128个标准字符,较高的128个字符为用户自行扩展.微软在此基础上提出了代码页得概念.代码页为不同的国家和地区对ANSI字符集的高128字符进行了扩展,低128字符仍然是标准字符.代码页概念的提出,使得计算机能够描述的字符更多了
虽然基于8位的ANSI字符集加上代码页得概念使得ANSI能够表示更多的字符,能够描述更多的国家和地区的语言,但是在我们东方中国,日本,朝鲜(韩国)我们使用的是象形文字,在我们汉语中汉字的个数至少近5万个,常用的有3000多个,如果用ANSI字符集是无论如何也无法表示出来所有汉字的.正因为如此就出现了另一个字符集
双字节字符集
.双字节字符集(DBCS)双字节字符集低128字符与ANSI标准相同,高128为非标准的,描述其他国家和地区语言符号,象形文字从257个字符开始.第一个字节为一个值为一个128-255之间的数(注:这个数用有符号类型表示就是一个负数)后面跟着第二个字节.这连个字节定义一个字符,就表示一个象形文字,虽然中文,日文,朝鲜文都是象形文字,而且其中有些还是相同的文字,但是显然的这三种语言是不同的.所以在双字节字符集中也是有代码页这个概念的.比如说:代码页932中文,代码页936日文,949朝鲜文,950繁体中文
在双字节字符集中并不是说字符就是用2个字节表示,其中的标准ASCII字符部分是用一个字节表示的,这样的单双字节共存的编码模式就带来了问题.比如说一个包含英文字母和汉字的字符串,字符串中的字符数就不能从字符串的长度上直接计算出来.这需要经过分析其数据才能计算出来.由此我们不难看出双字节字符集也不能解决多种语言字符的问题.
UNICODE字符
很明显的我们面临的问题是世界上的书写语言无法用256个8位代码来表示.即使是双字节字符集能够表示复杂的象形文字,但是这个方法是笨拙的.而且给编程也带来了麻烦.
什么才是更好的解决方案呢?
我们编程的时候都遇到过这个问题,如果我们想描述一个数8位不够用,我们就是用16位去描述.那么同样的字符的问题也可以如此解决,既然8位无法描述所有的书写语言,那么我们为什么不考虑是用16位来描述呢?事实上我们已经在这么做了,这就是所谓的UNICODE字符集.
首先我们应该明白UNICODE字符与双字节字符的区别.在UNICODE中我们使用16位来表示字符,注意所有的字符都是16位表示的.而双字节字符我们还是处理8位的数据(ASCII标准部分是8位的;象形文字部分虽然是16位,实际上我们也是按2个8位去处理).
双字节字符串非常杂乱,但是UNICODE则显得更加的有秩序,因为所有的都是用16位来描述.在这里有必要简单的描述下UNICODE字符集中的内容.UNICODE字符集:前128个字符,也就是从
0x0000-0x007f是标准的ASCII字符,接下来的128个(0x0080-0x00ff)是 ISO-8859-1对ASCII的扩展.希腊字母使用从0x0370-0x3ff的代码,斯拉夫语使用从0x0400-0x4ff的代码,美国使用从
0x530-0x58f的代码,希伯来语使用从0x590-0x5ff的代码.中国,日本,韩国的象形文字(总称CJK)占用了从0x3000-0x9fff的代码.
UNICODE最大的好处就是只有一个字符集,那么它有缺点吗?当然有,UNICODE占用内存时ASCII的2倍,也许更大的问题是目前很多人都不习惯UNICODE.但是作为一个编程人员来说我们有我们的工作.
未来操作系统的发展方向很明显的是UNICODE无疑.UNICODE未来将给我们带来更多的好处.
你的程序在简体中文系统上开发的,能够让它不做任何修改正常的运行在繁体中文系统上吗?不能的话就请使用UNICODE吧.
ANSI 与 UNICODE 维护单一的源代码
我们都知道,如果我们使用传统的方法在简体中文系统上开发一个程序,然后把它拿到繁体中文