GB与BIG5内码转换COM原代码

转换

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

时间: 2024-07-29 06:58:44

GB与BIG5内码转换COM原代码的相关文章

VB6内置的内码转换功能

嘿嘿,看到这个题目,想必吓了一大跳吧,或者是摆出一副不相信的表情?不用着急,请听我慢慢道来. 话说这个VB6,很是无耻,居然内置了支持Unicode的功能,也就是说,当你读入一个字符串时,它根据本地缺省语言的对应关系将之转换为Unicode,输出时,再从Unicode转换为本地编码.一方面,它当然方便啦,随便出个什么语言的版本都好方便的,而且在Unicode的系统上,如NT,那它可就如鱼得水,Unicode毕竟是软件发展的方向,像现在中文Win9X使用的GBK内码,实际上就是向着Unicode走

让TRichEdit支持BIG5内码

大家好,现在的软件如:Foxmail等软件,都有显示GB内码和BIG5内码的功能.我经过一段时间的摸索,发现了实现这种功能的方法.现在就来介绍给大家.首先,要给大家介绍一下这两种内码:大家都知道英文的ASCII码是用一个字节来表示的,但中文因为文字数量太多,所以只能用两个字节来表示.实际上我们常见的文本文件中保存的就是每个汉字对应的内码,而汉字的内码就是该汉字在中文字库中的逻辑位置.在中文字库中,该逻辑位置存放了这个汉字的图像信息,有了这些图像信息,就可以显示该汉字了,当然在现在的Windows

用C语言实现常见的三种中文内码转换

常见的中文内码一般有GB2312(简体中文),GBK和台湾那边用的BIG5(繁体中文),有时候看一些台湾编程论坛里的资料,都是乱码,如果在IE中浏览,则要求安装繁体字库的支持.网上也有很多中文内码的转换工具,什么专家,大师,巨匠之类所有光辉灿烂的名字都被使用了,但是在自己的程序中集成这些功能岂不是更好.以前曾广泛流传过使用码表来转换中文内码的Code,但毕竟不完美,而且还要携带或内置一个巨大的表,浪费资源.Windows中提供了MultiByteToWideChar和WideCharToMult

PHP的内码转换函数 mb_convert_encoding()

因为某程序要用输出UTF-8编码..但是原数据是GBK编码的 百度 找了很多有关内码转换的类..但是缺点很多.又不支持GBK TO UTF-8 不过一个一个找还是在PHP官方的FAQ找到了mb_convert_encoding() 该函数要在PHP4.0.6以上才有..听说有的 想关链接: http://cn.php.net/manual/zh/function.mb-convert-encoding.php 做一个GBK To UTF-8 < ?php header("content-T

请帮忙把字节码翻译成java代码

问题描述 请帮忙把字节码翻译成java代码 有人能帮忙把下面的字节码翻译成对应的java代码吗,谢谢 // Byte code: // 0: ldc 40 // 2: dup // 3: astore_2 // 4: monitorenter // 5: aconst_null // 6: astore_3 // 7: aconst_null // 8: astore 4 // 10: aconst_null // 11: astore 5 // 13: aload_1 // 14: invok

织梦之GB码转换成Big5码

转换 /********************************//GB码转换成Big5码*********************************/function gb2big5($Text) { global $GB_DATA; if(empty($GB_DATA)){  $filename = dirname(__FILE__)."/data/gb-big5.table";  $fp = fopen($filename, "rb");  $g

BIG5码到BG码转换技术

中文因为数量太多,所以与英文用ASCII码一个字节表示不同,它使用两个字节来表示.通过计算这两个字节,我们可以得到其表示的汉字在中文字库中的位置.读取该位置的若干字节,以获得表示这个汉字的点阵信息.有了这些信息,就可以分别在DOS或WINDOWS中显示该汉字.事实上,在文本文件中保存的就是每个汉字对应的两个字节编码,而显示问题由中文操作系统自动解决. 汉字编码并不统一,我们使用的是GB码,而台湾地区使用的是BIG5码.BIG5码文件中保存的是汉字相应的BIG5编码,GB码文件中保存的是汉字相应的

新旧系统切换中 资料内码 处理

原系统 :MSSQL SERVER 7.0+DELPHI 新系统 :MSSQL SERVER 2000 + DELPHI 需要处理资料:spkfk(商品库房库) :                          (spid , //商品内码 pk                           spbh ,//商品编号 Unique index                            spmch ,//商品名称                           shpgg

浅析PHP中的字符串编码转换(自动识别原编码)

本篇文章是对PHP中字符串编码转换的实现代码进行了详细的分析介绍,需要的朋友参考下   复制代码 代码如下: /**  * 对数据进行编码转换  * @param array/string $data       数组  * @param string $output    转换后的编码  */ function array_iconv($data,$output = 'utf-8') {  $encode_arr = array('UTF-8','ASCII','GBK','GB2312','