VB6内置的内码转换功能

2016-02-19 17:56 63 1 收藏

下面请跟着图老师小编一起来了解下VB6内置的内码转换功能,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

嘿嘿,看到这个题目,想必吓了一大跳吧,或者是摆出一副不相信的表情?不用着急,请听我慢慢道来。
  话说这个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码,合理运用这个参数,就可以写出一个非常简单的内码转换工具!
  什么?你还不明白,哎,就把源码给你看看吧。
  DimiReadNumberAsInteger`读文件号
  DimiWriteNumberAsInteger`写文件号
  Dimmem()AsByte`byte数组
  DimstrFileNameAsString`文件名
  DimlLengthAsLong`文件长度
  
  `将文件内容读入membyte数组
  iReadNumber=FreeFile
  strFileName=TextFileName.Text
  lLength=FileLen(strFileName)
  ReDimmem(lLength)AsByte
  OpenstrFileNameForBinaryAs#iReadNumber
  Get#iReadNumber,,mem
  Close#iReadNumber
  
  `将mem数组转换为Big5码所对应的Unicode码
  mem=StrConv(mem,vbUnicode,&H404)
  `再将Unicode码转换为GBK编码
  mem=StrConv(mem,vbFromUnicode,&H804)
  
  `写到源文件里去
  iWriteNumber=FreeFile
  KillstrFileName
  OpenstrFileNameForBinaryAs#iWriteNumber
  Put#iWriteNumber,,mem
  Close#iWriteNumber
  `结束
  (笔者用的是中文VB6Professional版+servicepack3。)
  怎么样,方便吧?短短几行就把Big5码转换到GBK了。
  不过方便是方便了,但是呢,也有它自己的缺陷,老实说,用这种方法来转换GBGBK到Big5码是非常好的,可是把Big5码转过来的话,结果居然是繁体的!看起来真的是很不爽,哎,这也没有办法,Unicode里面就是这个对应关系;此外呢,这样转换毕竟是走了两步路,所以呢,从理论上来说,比别的转码软件慢了一倍!
  但是这样转过来可是有两大好处的,一,不会有错误的码,这可是国际标准哟,你想什么?二,不会有缺字,就像现在的很多转码软件都是从Big5转到GB码,想想看15000字转到六七千字,一一映射,没有缺字才怪!->

来源:https://www.tulaoshi.com/n/20160219/1616430.html

延伸阅读
用VB6编写强力的windows隐藏引擎 编程爱好者一定经常见到能够隐藏桌面项目和状态栏等的软件,其中最著名的就是Hide-It。其实我们能够编写一个功能更加强大的即时超级隐藏引擎,它不仅可以隐藏桌面项目、开始按钮、状态栏、时钟栏,而且可以隐藏任何软件的按钮、菜单、工具栏、文本框、状态栏等等,只要是能够看见的独立部分——当然也可以...
一、前言 数据类型转换在编程中经常用到,VB6提供了一整套类型转换的函数。但是,在进行类型转换时,有时候仅仅依靠VB提供的函数是不能达到自己的目的的。因此,需要考虑用其他的方法来完成数据类型转换。本文仅谈VB6中字节数组和字符串的相互转换过程中应注意的问题及其解决办法。 在VisualBasic中使用Byte数组主要是为了3...
标签: vb
由于XML文档是以树形结构为格式,所以通常采用TreeView控件显示它们。以下码段说明了如何在Visual Basic 6将XML文档传入一个TreeView控件。 首先,建立一个新的带有窗体的Visual Basic 6工程,然后在窗体中添加一个TreeView控件,并添加一个引用到微软XML解析器。 接着,在Form_Load事件中添加如下的代码: Private Sub F...
标签: vb
  很多兄弟在这里问关于VB6读写数据库中的图片的问题,在此有一例,希有所启发。    1,以人名和相关图片为例说明,数据库为Access,有如下字段:Name char,picture OLE object,FileLength Number。当为ms sql时,将picture改为lob即可。    2,示例包含control:commom dialog,picture,listbox。 源码如下...
现在计算机多媒体技术的发展,使影碟无需借助解压卡就可以在电脑中播放,而且由于vcd2.0标准的普及,影碟已经完成了向数字文件化的过渡,完全可以轻松的将任何vcd拷贝到自己的硬盘上欣赏,而无须辛苦娇嫩的光驱.这也为我们截取任何影碟的片断提供了可能.但是目前普遍采用的压缩成AVI文件的办法不仅体积庞大、画面停滞而且速度非常慢。笔者在总结编写...

经验教程

164

收藏

98
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部