宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒

ascii转unicode函数

上一篇 / 下一篇  2010-09-21 11:04:01 / 个人分类:小记

    测试下发短信到终端出现乱码问题。海外用户反馈中心下发短信到车台都不能正常显示,否管是数字还是字母。可是在中文环境下我们设置一直正常。在国内同样的产品出厂很多也没有问题,也没有用户投述,一开始以为是用户描述错了。最后是测试人员把英文环境搭起来,发现问题是存在的。
中心下发hello,world!到车台.以这两种下发都不显示最后发现是在程序中ascii转unicode函数有问题。
附ascii,unicode区别
对国外的用户可用ascii来表示,unicode会多用两个字节。可是由于产品是国内生产的要处理全角的数字和字母。所以都用unicode编码。
 
首先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形式存放则为"45 00".至于如何用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是因为它有字体识别功能.普通记事本只把文字链接到系统字体上,而英文系统的默认字体可不是不
首先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形式存放则为"45 00".至于如何用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是因为它有字体识别功能.普通记事本只把文字链接到系统字体上,而英文系统的默认字体可不是不

TAG:

 

评分:0

我来说两句

Open Toolbar