久久首页
免费软件
网络时尚
网络学堂
专题讨论
网络资源
网络游戏
网络文档
网络产品
网站导航: 首页 > 网络编程 > VB 学堂讨论 | 推荐文章

GB与BIG5内码转换COM原代码


2003-04-10 blood 
 
原代码如下:

'//////////////////////////////////////////
'中文名称: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

 
发表评论 推荐文章 关闭窗口
 相关内容
- 关于ADOX 2003-04-10
- 制作自己的网络搜索软件 2003-04-10
- 使用VB收发电子邮件 2003-04-10
- 用Visual Basic编程实现清空文档菜单 2004-05-24
- 用VB实现程序之间的简单通信 2004-05-24
- VB通过DAO访问Access数据库 2004-05-24
- 用VisualBasic做个IE保护器 2004-05-24
- 用Visual Basic提取图标资源 2004-05-24
- 用VB6实现隐藏和显示“程序” 2004-05-25
- 用VB导入导出IE收藏夹 2004-05-25
 
 学堂分类
网络知识操作系统
网络应用网络服务
网页开发网络编程
数据存储网络设备
 文章搜索
 
网站简介 | 广告服务 | 编程支持 | 设计服务 | 诚邀合作 | 访客留言
Copyright © 1999-2004 99NET. All Rights Reserved
版权所有 久久网络工作室
Email:webmaster@99net.net