Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2341174
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:08:06

现在的中文系统都使用的是 GBK 编码,不是以前的 GB2312 了

你说的是最早的汉字标准 GB2312, 最早的 DOS 版本的软件大部分采用这个编码,包括常用的简化汉字。
  GB2312 的编码范围:第一个字节(LeadByte) 的范围 0xa1~0xf7 (161~247)
                     第二个字节(TrailByte) 的范围 0xa1~0xfe (161~254)

从 Windows 95 之后,系统采用的编码是 GBK, 除了完全包括 GB2312 的常用简化汉字之外,还包括了一些不常用的汉字和繁体字
  GBK 的编码范围:第一个字节(LeadByte) 的范围 0x81~0xfe (129~254)
                  第二个字节(TrailByte) 的范围分两段 0x40~0x7e 和 0x80~0xfe (64~126 和 128~254)

例如“玠”字的编码是 0xab,0x64 (171,100) 属于第二个字节 (TrailByte) 在 0x40~0x7e 这个范围的汉字编码

现在大部分系统采用的是 GBK 编码,即使是 GBK,在 GB2312 的基础上增加了很多的汉字,但是仍然不能包括所有的汉字,很多系统都支持 GB18030 的复杂汉字编码,虽然国家已经规定不支持 GB18030 编码的软件不让上市,但现在多数软件还都没采用,只有操作系统和一些大型软件企业支持,Windows 可以通过安装微软的 GBEXTSUP 支持 18030 编码,这种复杂编码是一个汉字2个字节到3个字节,这种编码编程也特别麻烦,一个字可能是1个字节、2个字节或者3个字节,这样的汉字用 LeadByte 和 TrailByte 已经不能正确描述了。

以上编码都是指 AnsiString 类型的字符串(char类型的) 说的,对于 WideString 字符串(wchar_t类型的)就非常简单了。

判断汉字的最简单的方法是转成 WideString, 即 Unicode 编码:所有国家的语言都统一编码,这种编码对于每一种语言或者符号类型都给特定的编码范围,判断特别容易,Unicode 的每个字符(wchar_t) 的范围如果在 0x4e00~0x9fa5 和 0xe815~0xfa29 之间是纯粹的汉字,不包括符号,这些汉字是 GBK 编码范围之内的汉字,不包括符号。如果范围在 0x3400~0x4db5 之间是 GB18030 扩充的汉字,另外 GB18030 里面还有我国少数民族的文字,例如彝文、蒙文等,在 Unicode 编码里也能找到对应位置。别的国家的文字,例如朝鲜语、阿拉伯语等,在 Unicode 里都有相应的位置。各国家语言的符号也可以在 Unicode 编码里面找到对应的位置。

所以建议用 WideString (用 Unicode 编码) 判断文字的类型,对于所有的编码都适用,而且还特别简单。

--------------------next---------------------

阅读(1945) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~