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

原创 2002年03月21日 08:53:00

这个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

GB与BIG5内码转换COM原代码

功能:GB与BIG5内码转换COM原代码english name: GB2BIG5Option ExplicitDim BIG5Data As VariantDim GBData As Variant...
  • dingrj
  • dingrj
  • 2006年03月28日 09:58
  • 778

如何区别文本是BIG5还是GB?

关于GB与BIG5码的判别,没有100%可靠的方法。但是从两个编码系统汉字的分布来看,还有可以作一定的判断的。 GB码的编码范围是首字节A1-F7,尾字节A1-FE,而且首字节A1-A9是符号区,AA...
  • ghj1976
  • ghj1976
  • 2000年12月04日 10:50
  • 3899

BIG5到GB的转换技术

中文因为数量太多,所以与英文用ASCII码一个字节表示不同,它使用两个字节来  表示。通过计算这两个字节,我们可以得到其表示的汉字在中   文字库中的位置。读取该位置的若干字节,以获得表示这个汉字的点...
  • hhdsq
  • hhdsq
  • 2002年11月15日 14:03
  • 1021

用Python实现GB与BIG5码的转换

       GB码与BIG5是中国人常用的两种编码集。GB码为大陆使用,BIG5为香港与台湾使用。每个编码都由2个字符构成,高字节在前,低字节在后。下面我将使用Python实现的编码转换的程序向大家...
  • dongle2001
  • dongle2001
  • 2005年07月20日 11:34
  • 864

GB码 BIG5码区别是什么?

计算机中表示中文文字的编码方式,GB是简体中文 BIG5是繁体中文的
  • xsj_blog
  • xsj_blog
  • 2016年07月09日 13:29
  • 284

GB2312、GB18030、GBK、UNICODE、BIG5之间兼容关系如何?

常用字符集分类 ASCII及其扩展字符集 作用:表语英语及西欧语言。 位数:ASCII是用7位表示的,能表示128个字符;其扩展使用8位表示,表示256个字符。 范围:ASCII从00到7F,扩展从0...
  • u013314786
  • u013314786
  • 2017年09月09日 15:54
  • 167

(转)简体繁体转换代码(Big5-GB | GBK简体-GBK繁体)

Function   Big52GB(BIG5Str:   String):   AnsiString; {进行big5转GB内码} Var     Len:   Integer;     pBIG5...
  • gxj1680
  • gxj1680
  • 2011年04月28日 11:56
  • 1958

汉字简体繁体转换|GB国标码|Big5码

汉字简体GB国标码繁体Big5码互相转换   ←【加入收藏夹】         管理员在2009年8月13日编辑了该文章文章。 --> ...
  • lanndmentt
  • lanndmentt
  • 2013年11月14日 18:02
  • 858

用Python实现GB与BIG5码的转换

GB码与BIG5是中国人常用的两种编码集。GB码为大陆使用,BIG5为香港与台湾使用。每个编码都由2个字符构成,高字节在前,低字节在后。下面我将使用Python实现的编码转换的程序向大家作一个介绍。关...
  • wisemanglm
  • wisemanglm
  • 2007年05月18日 10:44
  • 388

GB/BIG5/UTF-8 文件编码批量转换程序

昨天我需要将一个 GB 编码的 WEB 应用改变成 UTF-8 编码,整个 WEB 程序涉及 300 多个 ASP 和 HTML 文件….于是乎,我上网搜索能将 GB 文件批量转换成 UTF-8 编码...
  • tttk
  • tttk
  • 2007年06月02日 22:15
  • 746
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:GB与BIG5内码转换COM的原代码(已经贴在开发者俱乐部了,在这里再贴一下)
举报原因:
原因补充:

(最多只允许输入30个字)