• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

GB与BIG5内码转换COM的原代码

发布: 2007-6-21 21:57 | 作者:   | 来源:   | 查看: 22次 | 进入软件测试论坛讨论

领测软件测试网

   
  GB与BIG5内码转换COM的原代码(已经贴在开发者俱乐部了,在这里再贴一下)    blood(原作)
  
关键字     GB BIG5
  

这个COM用到了一个VC的资源文件。就是字典。

大家可以去61.134.75.70/download/gb2big5.zip下载

原代码如下:

注释://////////////////////////////////////////
注释:中文名称:GB与BIG5内码互换控件
注释:英文名称:GB2BIG5
注释:作者:Blood
注释:版本:1.0
注释:制作时间:2002.3.5
注释:版权所有 Blood 2002 - 2003
注释://////////////////////////////////////////

Option Explicit

注释:定义变量
Dim BIG5Data As Variant
Dim GBData As Variant

注释:定义自定义类型,用来处理编码的高低字问题
Type ChineseTypeA
    loChar As Byte
    hiChar As Byte
End Type

Private BIG5Type(&HA1 To &HFF, &H40 To &HFE) As ChineseTypeA    注释:对应于BIG5字库
Private GBType(&HA7 To &HFF, &HA1 To &HFE) As ChineseTypeA      注释:对应与GB字库

注释://////////////////
注释:公共函数开始
注释://////////////////

注释:BIG5转换到GB的函数
        
Function BIG5TOGB(strSource As String) As String
    Dim I As Long, Y As Long
    注释:定义数组,用来存放BIG5和GB内码数据
    Dim bteBIG5() As Byte
    Dim bteGB() As Byte
    
    注释:如果输入的内容为空,则退出函数
    If strSource = "" Then
        BIG5TOGB = ""
        Exit Function
    End If
    
    注释:将BIG5数组的类型从Unicode编码转换为系统缺省码
    bteBIG5 = StrConv(strSource, vbFromUnicode)
    注释:确定BIG5数组的下标,用来循环将所有的BIG5内容转换为GB内码
    Y = UBound(bteBIG5)
    ReDim bteGB(0 To Y)
    For I = 0 To Y
        If I = Y Then
            bteGB(I) = bteBIG5(I)
            Exit For
        End If
        If bteBIG5(I) < &HA1 Or bteBIG5(I + 1) < &H40 Then
            bteGB(I) = bteBIG5(I)
        Else
            bteGB(I) = BIG5Type(bteBIG5(I), bteBIG5(I + 1)).loChar
            bteGB(I + 1) = BIG5Type(bteBIG5(I), bteBIG5(I + 1)).hiChar
            I = I + 1
        End If
    Next I
    注释:将系统缺省码转换为Unicode编码
    BIG5TOGB = StrConv(bteGB, vbUnicode)
    注释:重新初始化GB数组,以释放内存
    Erase bteGB
End Function

注释:GB转换到BIG5的函数

Function GBTOBIG5(strSource As String) As String
    Dim I As Long, Y As Long
    注释:定义数组,用来存放BIG5和GB内码数据
    Dim bteGB() As Byte
    Dim bteBIG5() As Byte
    
    注释:如果输入的内容为空,则退出函数
    If strSource = "" Then
        GBTOBIG5 = ""
        Exit Function
    End If
    
    注释:将GB数组的类型从Unicode编码转换为系统缺省码
    bteGB = StrConv(strSource, vbFromUnicode)
    注释:确定GB数组的下标,用来循环将所有的BIG5内容转换为GB内码
    Y = UBound(bteGB)
    ReDim bteBIG5(0 To Y)
    
    For I = 0 To Y
        If I = Y Then
            bteBIG5(I) = bteGB(I)
            Exit For
        End If
        If bteGB(I) < &HA1 Or bteGB(I + 1) < &HA1 Then
            bteBIG5(I) = bteGB(I)
        Else
            If bteGB(I) < &HB0 And bteGB(I + 1) >= &HA1 Then
                bteBIG5(I) = GBType(bteGB(I) + 6, bteGB(I + 1)).loChar
                bteBIG5(I + 1) = GBType(bteGB(I) + 6, bteGB(I + 1)).hiChar
            Else
                bteBIG5(I) = GBType(bteGB(I), bteGB(I + 1)).loChar
                bteBIG5(I + 1) = GBType(bteGB(I), bteGB(I + 1)).hiChar
            End If
            I = I + 1
        End If
    Next I
    注释:将系统缺省码转换为Unicode编码
    GBTOBIG5 = StrConv(bteBIG5, vbUnicode)
    注释:重新初始化BIG5数组,以释放内存
    Erase bteBIG5
End Function

注释://////////////////
注释:公共函数结束
注释://////////////////

注释:类初始化
Private Sub Class_Initialize()
    Dim I As Long
    Dim J As Long
    Dim iLen As Long
    
    注释:从资源文件中读取GB与BIG5的字库
    GBData = LoadResData(102, "CUSTOM")      注释://读取GB字库
    BIG5Data = LoadResData(101, "CUSTOM")    注释://读取BIG5字库
    
    For I = &HA1 To &HFE
        For J = &H40 To &HFE
            BIG5Type(I, J).loChar = BIG5Data(iLen)
            BIG5Type(I, J).hiChar = BIG5Data(iLen + 1)
            iLen = iLen + 2
        Next J
    Next I
    
    iLen = 0
    
    For I = &HA7 To &HFE
        For J = &HA1 To &HFE
            GBType(I, J).loChar = GBData(iLen)
            GBType(I, J).hiChar = GBData(iLen + 1)
            iLen = iLen + 2
        Next J
    Next I
End Sub



延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网