庞大资源库的计算机教程网站!
设为首页
加入收藏
总编信箱
投稿或申请专栏请先 [登 陆]
首页 操作系统 程序设计 图形图像 媒体动画 机械电子 WEB开发 数 据 库 办公系列 路由技术 网络原理 网络应用
认证考试 安全技术
首页>程序设计>VB专区>编程技巧>正文
资料搜索
Google搜索
Google
返回上级列表

推荐文章

快速保存网页中所有图片的方法
Windows中让光驱巧妙“隐身”技
防范非法用户入侵Win 2000/XP系
两款比较典型的ASP木马防范方法
有关表格边框的css语法整理
Windows XP中可以被禁用的服务
SQL Server导出导入数据方法
Javascript所有对象的属性的获
网页(HTML)中的特殊字符
与篮球共舞,尽显模式本色
QQ病毒的手工清除方法
Photoshop为极品美女打造性感睫
天衣无缝:IIS与PHP水火也相容
SQL Server存储过程编写和优化

VB6内置的内码转换功能

 作者:文历    日期:2005-8-4 11:35:05
字号选择〖 〗/ 双击滚屏 单击停止   
嘿嘿,看到这个题目,想必吓了一大跳吧,或者是摆出一副不相信的表情?不用着急,请听我慢慢道来。
   话说这个VB6,很是无耻,居然内置了支持Unicode的功能,也就是说,当你读入一个字符串时,它根据本地缺省语言的对应关系将之转换为Unicode,输出时,再从Unicode转换为本地编码。一方面,它当然方便啦,随便出个什么语言的版本都好方便的,而且在Unicode的系统上,如NT,那它可就如鱼得水,Unicode毕竟是软件发展的方向,像现在中文Win9X使用的GBK内码,实际上就是向着Unicode走了一大步。可是在另一方面,这种支持实际上极大地延缓了字符串的处理时间!想想看,如果我们从文件里读一行并显示,本来是很简单的事情,可是在VB6里面,实际上多了一段转换到Unicode的时间,如果我们用字符串从原文件里读一行,然后分析,再写到目的文件里去,实际上就多了两重的时间(本地到Unicode , unicode到本地)。当然对于这种小事,高手们想必也都有处理的办法(如用byte数组来代替字符串)
   说了这么一大堆Unicode的坏话,还没说到正题呢,由于VB6内置对Unicode的支持,而Unicode里面分别和 GBK 以及Big5汉字都有对应关系,所以要实现转换也只是一件小事,下面我们就有请本次女主角出场。(哗哗哗哗……掌声不绝。)
   函数strConv! 这个美眉大家可能在VB5里面也都见过的,她有一些保镖,可以帮她把字符串在Unicode和本地编码之间转换,而在VB6里面呢,strConv又多了一个保镖!大家请仔细看:
   strConv(string,conversion) `VB5
   StrConv(string, conversion, LCID) `VB6
   string呢,就是预转换的字符串了(提示一下,也可以使用byte数组)。
   conversion: 是一个整数,只决定转换方式,VB里定义了一些常量,如VBFromUnicode、VBUnicode等等,这些不用我解释大家应该也明白了吧。
   LCID:哈,这可是VB6新加入的参数了,长整数, 可以指定编码方式, 如&H404,即Big5码, &H804即GBK码,合理运用这个参数,就可以写出一个非常简单的内码转换工具!
   什么?你还不明白,哎,就把源码给你看看吧。
   Dim iReadNumber As Integer `读文件号
   Dim iWriteNumber As Integer `写文件号
   Dim mem() As Byte `byte数组
   Dim strFileName As String `文件名
   Dim lLength As Long `文件长度

   `将文件内容读入mem byte数组
   iReadNumber = FreeFile
   strFileName = TextFileName.Text
   lLength = FileLen(strFileName)
   ReDim mem(lLength) As Byte
   Open strFileName For Binary As #iReadNumber
   Get #iReadNumber, , mem
   Close #iReadNumber

   `将mem数组转换为Big5码所对应的Unicode码
   mem = StrConv(mem, vbUnicode, &H404)
   `再将Unicode码转换为GBK编码
   mem = StrConv(mem, vbFromUnicode, &H804)

   `写到源文件里去
   iWriteNumber = FreeFile
   Kill strFileName
   Open strFileName For Binary As #iWriteNumber
   Put #iWriteNumber, , mem
   Close #iWriteNumber
   `结束
   (笔者用的是中文VB6 Professional 版 + service pack3。)
   怎么样,方便吧?短短几行就把Big5码转换到GBK了。
   不过方便是方便了,但是呢,也有它自己的缺陷,老实说,用这种方法来转换GB\GBK到Big5码是非常好的,可是把Big5码转过来的话,结果居然是繁体的!看起来真的是很不爽,哎,这也没有办法,Unicode里面就是这个对应关系;此外呢,这样转换毕竟是走了两步路,所以呢,从理论上来说,比别的转码软件慢了一倍!
   但是这样转过来可是有两大好处的,一,不会有错误的码,这可是国际标准哟,你想什么? 二,不会有缺字,就像现在的很多转码软件都是从Big5转到GB码,想想看15000字转到六七千字,一一映射,没有缺字才怪!
上一篇:用VB开发应用程序如何使用INI文件    下一篇:用VB进行移位操作  
[发送给好友]  [关闭窗口]  [返回顶部]   转载请注明来源:www.it00.com   
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
责任编辑: 原点 投稿作者: 文历
信息来源: 网络 录入时间: 2005-8-4 11:35:05
关于我们 - 广告服务 - 版权申明 - 网站地图 - 联系方式 - 总编信箱 - 会员投稿