字符集

 (1) ASCII 字符集
说的字符集历史这里不得不重点提及一下ASCII(American Standard Code for Information Interchange)。
该字符集于1967开发完成,该字符集一共包括字元码就有26个小写字母、26个大写字母、10个数字、32个符号、33个代号和一个空格,总共128个字元编码。该字符集由ANSI(American National Standards Institute)发布 。在今天很多看到的很多工业设备上仍然继续在使用这个标准。
其实今天我们来看ASCII仍然有很多的优点很多,我这里简单用一个大小写转换的例子来说明举例。
在ASCII中'A'字符16位编码为41,对应的'a'为61.在整个ASCII字符集中所有大小写字符之间都是首位差2个单位。关于完整的ASCII字符集,如后面图ASCII所示;
这里很有趣的是今天很多聊天工具采用ASCII字符组合形式创造了一些有趣的字符组,比如下面这些常见的字符:
:-) 表示微笑
            (__)
            (oo)
     /-------// 
    / |        ||
*   ||------||
www.cstc.net.cn
   ----(小公牛)
类似这样的还有很多很多,大家可以通过一些图形化的ASCII编辑器去构建一些有趣的图案。
不过关于ASCII的问题也是很明显的,由于当时设计成本和其他因素的考虑,没有过多考虑美国以外其他国家字符的情况,所以出现了ASCII标准的瓶颈,虽然ISO(国际化标准组织)试图做一些改进,不过由于本身设计上局限性所限制,虽然如此我们仍然不能否认ASCII在计算机发展中做出的贡献。并且为后人设计更好的字符集起到了先驱的作用。

(2) ANSI 字符集
首先这里大家需要明白一点,对于Windows而言非常有意义的。
因为Windows发布第一个版本时候使用的就是ANSI草案和ISO标准设计的Windows字符集。
该标准全称为American National Standard for Information Processing-8-Bit Single-Byte Coded Graphic Character Sets-Part 1: Latin Alphabet No 1,也就是今天我们说的Latin 1,该标准由ANSI草案和国际标准化组织发布。
早期ANSI使用的是完全8位字符集处理,也就具有了 256个字符元。
在Windows 1.0 版本中使用的ANSI字符集如后面的图ANSI所示;
ANSI字符集最大一个特点是向下兼容ASCII.并且留有空余位置处理一些特殊字符。
虽然ANSI字符集的256个字元解决了部分国家对于字符的使用的问题,但是我们汉字中国拥有成千上万的字符。是如无法通过ANSI解决的。

(3)Double-Byte Character
前面提到的ASCII和ANSI都没有办法解决汉字的字符问题,这时候提出了一种double-byte character set(DBCS)来解决上面遇到的问题。DBCS前面的256位保持了和 ANSI的相同,同样是一种向下兼容性的考虑。由于DBCS的引入短期内解决的中文、日文和韩文的字符问题,但是长于分析双字符集的处理方式还是不能满足例如符号、图形等的增加。

(4)Unicode Character
Unicode字符集的出现最后终于解决了字符不够使用的问题,原因是Unicode使用16位的字符集总共包括了
65,536 字符元,这样对于世界上所有国家的字符、符号或者货币都是足够的了。
关于Unicode最大的好处是单一的一个字符集,通过不同区域的划分实现了字符集有序的管理。
补充一点大家可以通过查看Office word中具有的一个插入字符功能,那里可以获得所有关于Unicode字符的信息。同时Unicode使用的是一种宽字符集。这样Unicode的缺点大家很容易就知道了就是字符的大小。Unicode字符大小正好是ASCII的两倍。

这里继续上面的内容,上面中提到过Unicode使用的是宽字符。具体什么是宽字符呢?有什么特点呢?这些问题都将会在这篇中学习。
字符首先大家很容易想到了ISO C标准中定义的字符关键字char .使用该字符关键字很容易定义一个字符相关信息。
例如:char ch = ‘a' ; //定义一个字符变量ch = 'a'
例如:char* p = &ch ; //定义一个字符指针指向字符ch
例如:char* str = "liangzhen" ;//定义一个字符串
对于宽字符和字符类似,WCHAR.H文件中定了宽字符的字符关键字wchar_t;
对于宽字符定义和字符类似,但是有些其他使用稍微有些差异。
例如:wchar_t ch = 'A'; //定义一个宽字符a
对于Windows来说举办两套字符处理的函数,一套是用于处理字符的、另外一套适用于处理宽字符的。
通常这类函数通过增加一个w字符表示,例如wprintf是printf的宽字符版本;
不过也有很多例外的,例如获得宽字符串长度使用的是wcslen而wstrlen不是一样;

这章关于预编译部分的内容我在这里忽略过了,因为那部分完全属于C语言的知识,和本文没有直接的关系。知识希望大家明白如何处理多字符集选择使用的问题。

最后我个人觉得这章除了在字符编码上重点外,还有一个隐式重点。就是如何扩展你的资源,大家可以看到虽然字符集不断的发展,始终保持着向下兼容性的原则。这样对于程序员和程序本身都是非常有价值的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值