DBCS

来自于百度百科:

 

 ========================================================================

 DBCS:double-byte character set

  最初的128个代码是ASCII,较高的128个代码中的某些总是跟随著第二个位元组。这两个位元组一起(称作首位元组和跟随位元组)定义一个字元,通常是一个复杂的象形文字。

  虽然中文、日文和韩文共用一些相同的象形文字,但显然这三种语言是不同的,而且经常是同一个象形文字在三种不同的语言中代表三件不同的事。Windows支援四个不同的双位元组字元集:内码表932(日文)、936(简体中文)、949(韩语)和950(繁体汉字)。只有为这些国家(地区)生产的Windows版本才支援DBCS。明白Unicode和DBCS之间的区别很重要。Unicode使用(特别在C程式设计语言环境里)「宽字元集」。「Unicode中的每个字元都是16位元宽而不是8位元宽。」在Unicode中,没有单单使用8位元数值的意义存在。相比之下,在双位元组字元集中我们仍然处理8位元数值。有些位元组自身定义字元,而某些位元组则显示需要和另一个位元组共同定义一个字元。

  处理DBCS字串非常杂乱,但是处理Unicode文字则像处理有秩序的文字。您也许会高兴地知道前128个Unicode字元(16位元代码从0x0000到0x007F)就是ASCII字元,而接下来的128个Unicode字元(代码从0x0080到0x00FF)是ISO 8859-1对ASCII的扩展。Unicode中不同部分的字元都同样基於现有的标准。这是为了便於转换。希腊字母表使用从0x0370到0x03FF的代码,斯拉夫语使用从0x0400到0x04FF的代码,美国使用从0x0530到0x058F的代码,希伯来语使用从0x0590到0x05FF的代码。中国、日本和韩国的象形文字(总称为CJK)占用了从0x3000到0x9FFF的代码。

 

下面的来自于一个blog

http://hi.baidu.com/dp282074009/blog/item/77d06bece8e2f83b269791e4.html

================================================================

首先DBCS是亚洲的字符集,包含了ANSI,ANSI也就是ASCII值为0-255之间的字符,当字符为ANSI时,存放于文件中占用的是一个字节。如果是非ANSI的呢,则占用两字节。用VB的ASC函数可以很容易得到一个字符的DBCS值(或是说ANSI值吧)
  假如一个字符得到的DBCS值为&H1234,当然,这个值是转换成了十六进制的,因为对于磁盘存放来说,一般使用位(BIT),即二进制存放,而显示字节呢用十六进制显示则非常直观。存放在文件中即"12 34"(这是用十六进制文本编辑器中查看到的形式)。而UNICODE是世界性的字符集,几乎包含了世界上的所有字符,每个字符都有一个单一的UNICODE值。UNICODE值也是占用两个字节的。但不同的是它虽然也包含了标准的ANSI字符值,但是ANSI字符只占用一个字节,UNICODE会自动在ANSI值后加入一个值为0的字节。比如说一个ANSI值为&h45的字符,以UNICODE形式存放则为"4500"。至于如何用VB得到一个字符的UNICODE值,ASCW函数可以轻松搞定。但是普通的非ANSI字符以UNICODE形式时则是从右存到左的。比如一个值为&H1234的字符,存为UNICODE时则为"34 12"
  知道了这些有什么用呢?UNICODE的意义在于能让不同环境下的操作系统识别。比如说吧,你在中文的操作系统下使用记事本写了一篇文本文章。但你要拿到别的环境下的WIN2K(之所以选WIN2K,是因为WIN2K支持UNICODE,否则用WIN98只能用外接中文平台才能查看)下查看(比如美国的电脑,操作系统为英文,代码页也是美国(WIN2K有设置代码页)),即使该电脑已经安装了中文字体,即使用WORD这样的编辑软件打开也肯定是乱码一堆。这是为什么呢?因为英文的WIN2K操作系统只能识别UNICODE呀!并不能识别咱们亚洲的DBCS码呀!
  解决方法只要你把它转换为UNICODE码存放就OK了!像Utrla Edit就能转换。WIN2K里也有代码转换器可以,而WIN2K下的记事本则可以用另chun为UNICODE码。如果你使用的是WIN9X,则可以自己用VB解决了。UNICODE码存放的文本文件与普通的文本文件不同之处仅仅是文件头加了"FF FE"而已。其他的则是代码值不同。只要转换了字符的代码,并在文件前加上"FF FE"这两个字节,就是把这篇中文文章保存为UNICODE格式了!转换成UNICODE格式后,英文操作系统的机器只要用WORD打开你的文件就能查看了!(为什么用WORD是因为它有字体识别功能。普通记事本只把文字链接到系统字体上,而英文系统的默认字体可不是不包含中文的哟!当然就显示不出来啦)EXE等可执行文件的字串存放格式也差不多都是这样的。不过VB编写的程序有点意思,有些字符以DBCS存放,有些则是以UNICODE存放的。而其他工具编译的文件则大多为DBCS单一类型存放。DBCS存放的字符修改起来非常容易。使用UE这样的十六进制文本编辑器查找要修改的字串,只要把“查找ASCII”打上勾就OK了。但是用UNICODE存放的就不好这么找了。这下我们可以用VB来解决啦!前面已经提到,像一个值为&h1234的字符存放在文件中为"34 12"
那么我们用VB的ASCW函数得到它的十六进制值,再把值反过来不就可以了吗?反过来后再把这个值拿到UE中去搜索,不要把“查找ASCII”选上,这下我们要修改的文字就能找到了!再用VB把要替换进去的文字也转成相同的形式,再到UE里对照相应的值修改即可。
一般来说,VB里事先在开发环境下存放好的字符,如LABEL中的字符,就是以DBCS存放的。而硬编码在EXE中的文字。比如:
MSGBOX "这是编译在代码中的文字"
其中这几个中文字符就是以UNICODE形式存放的。还有资源文件中的字串资源亦是如此。
这样一来,即使软件作者硬编码在EXE中的文字我们都可以随意修改喽。HOHO
希望我写这篇文章对大家能有所帮助。
附:理论上程序使用UNICODE能不受操作系统环境影响,(WINDOWS的帮助上亦是如此之说)。但实际上因为受到字体链接等环境因素影响,并不能正常的显示出文字。要使软件国际化还是建议使用资源文件,多建几个不同代码页的字串表。这样一来方便以后修改,二来对于EXE程序的资源占用也有好处。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值