'****** 简繁体互换 GB--> BIG5 Or BIG5--> GB ***************** '参数sStr为需要转换的文本 '参数iConver为要转化的类型,为1时表示繁体到简体的转换,为2时表示简体到繁体的转换 Function GBBIG5(sStr As String, iConver As Integer) As String On Error Resume Next Dim STR If iConver = 1 Then 'BIG5--> GB STR = StrConv(sStr, vbFromUnicode, & H804) GBBIG5 = StrConv(STR, vbUnicode, & H404) ElseIf iConver = 2 Then 'GB--> BIG5 STR = StrConv(sStr, vbFromUnicode, & H404) GBBIG5 = StrConv(STR, vbUnicode, & H804) End If
Would you mind give me the source code. Thank you. [email protected]
有个想法作为参考 1)把他们读入内存 把文本文件内容读取TextBox: Dim TempFile As Long Dim LoadBytes() As ByteTempFile=FreeFile Open 文件名 For Binary As #TempFile Redim LoadBytes(1 To Lof(TempFile)) As Byte Get #TempFile,,LoadBytes Close TempFileText1.Text=StrConv(LoadBytes,vbUniCode)2)转换成byte数组 Option ExplicitPrivate Sub Command1_Click() Dim a As String Dim b() As Byte a = "法拉卡拉法阿阿萨阿啊啊啊啊啊啊啊;" Dim i As Integer i = 1 Dim j As Integer j = -1 Dim l As Long
Do While i <= Len(a) l = Asc(Mid(a, i, 1)) i = i + 1 If l < 0 Then l = l + 65536 j = j + 2 ReDim Preserve b(j) b(j - 1) = (l \ 256) Mod 256 b(j) = l Mod 256 Else j = j + 1 ReDim Preserve b(j) b(j) = l End If Loop For i = 0 To UBound(b) Debug.Print b(i) Next iEnd Sub 3)根据公式转换 这是徐景周的c代码 void Big2GB::BigtoGB() { CalLineNumber(); if(m_text=="\n") return; for(int Line=0;Line<GetLineNumber();Line++) { BYTE* SourceSTR; SourceSTR=(BYTE* )((LPCTSTR)strLine[Line]); int size=strLine[Line].GetLength(); if(size) { BYTE* DestSTR=new BYTE[size+1]; unsigned i=0; do { // is English 是英文字符 if(SourceSTR[i]<0xA1||(SourceSTR[i+1]<0x40)) { DestSTR[i]=SourceSTR[i]; i++; } else //是BIG5的汉字码 { DestSTR[i+1]=HIBYTE(pBIGTable[(SourceSTR[i]-0xA1)*0xBF+SourceSTR[i+1]-0x40]); DestSTR[i]=LOBYTE(pBIGTable[(SourceSTR[i]-0xA1)*0xBF+SourceSTR[i+1]-0x40]); i+=2; } } while(i<strlen((char*)(SourceSTR))); DestSTR[i]='\0'; strLine[Line]=DestSTR; delete DestSTR; } } }void Big2GB::GBtoBig() { CalLineNumber(); if(m_text=="\n") return; for(int Line=0;Line<GetLineNumber();Line++) { BYTE* SourceSTR; SourceSTR=(BYTE* )((LPCTSTR)strLine[Line]); int size=strLine[Line].GetLength(); if(size) { BYTE* DestSTR=new BYTE[size+1]; unsigned i=0; do { // is English 是英文字符 if(SourceSTR[i]<0xA1||(SourceSTR[i+1]<0xA1)) { DestSTR[i]=SourceSTR[i]; i++; } else if(SourceSTR[i]>0xA1&&SourceSTR[i]<0xB0) //是GB2312的汉字码 { DestSTR[i+1]=HIBYTE(pGBTable[(SourceSTR[i]-0xA1)*0x5E+SourceSTR[i+1]-0xA1]); DestSTR[i]=LOBYTE(pGBTable[(SourceSTR[i]-0xA1)*0x5E+SourceSTR[i+1]-0xA1]); i+=2; } else { DestSTR[i+1]=HIBYTE(pGBTable[(SourceSTR[i]-0xA7)*0x5E+SourceSTR[i+1]-0xA1]); DestSTR[i]=LOBYTE(pGBTable[(SourceSTR[i]-0xA7)*0x5E+SourceSTR[i+1]-0xA1]); i+=2; } } while(i<strlen((char*)(SourceSTR))); DestSTR[i]='\0'; strLine[Line]=DestSTR; delete DestSTR; } }} 4)把byte数组转换成字符串 Dim strC as string Dim intI as long Open file fot binary as #1 ReDim bytbuf(1 To LOF(1)) As Byte Get #1, , bytbuf() Close #1 '将byte数组转化成string strC=bytbuf() pring strC ’将byte数组放为0xC3的形式。 For intI = LBound(bytbuf) To UBound(bytbuf) If Len(Hex(bytbuf(intI))) = 1 Then bytbuf(intI) = "0x0" & Hex(bytbuf(intI)) Else bytbuf(intI) = "0x" & Hex(bytbuf(intI)) End If DoEvents Next intI 5)写入文件 把TextBox内容写入文本文件: Dim TempFile As Long Dim SaveBytes() As ByteSaveBytes=StrConv(Text1.Text,vbFromUniCode)TempFile=FreeFile Open 文件名 For Binary As #TempFile Put #TempFile,,SaveBytes Close TempFile
'参数sStr为需要转换的文本
'参数iConver为要转化的类型,为1时表示繁体到简体的转换,为2时表示简体到繁体的转换
Function GBBIG5(sStr As String, iConver As Integer) As String
On Error Resume Next
Dim STR
If iConver = 1 Then 'BIG5--> GB
STR = StrConv(sStr, vbFromUnicode, & H804)
GBBIG5 = StrConv(STR, vbUnicode, & H404)
ElseIf iConver = 2 Then 'GB--> BIG5
STR = StrConv(sStr, vbFromUnicode, & H404)
GBBIG5 = StrConv(STR, vbUnicode, & H804)
End If
End Function
[email protected]
1)把他们读入内存
把文本文件内容读取TextBox:
Dim TempFile As Long
Dim LoadBytes() As ByteTempFile=FreeFile
Open 文件名 For Binary As #TempFile
Redim LoadBytes(1 To Lof(TempFile)) As Byte
Get #TempFile,,LoadBytes
Close TempFileText1.Text=StrConv(LoadBytes,vbUniCode)2)转换成byte数组
Option ExplicitPrivate Sub Command1_Click()
Dim a As String
Dim b() As Byte
a = "法拉卡拉法阿阿萨阿啊啊啊啊啊啊啊;"
Dim i As Integer
i = 1
Dim j As Integer
j = -1
Dim l As Long
Do While i <= Len(a)
l = Asc(Mid(a, i, 1))
i = i + 1
If l < 0 Then
l = l + 65536
j = j + 2
ReDim Preserve b(j)
b(j - 1) = (l \ 256) Mod 256
b(j) = l Mod 256
Else
j = j + 1
ReDim Preserve b(j)
b(j) = l
End If
Loop
For i = 0 To UBound(b)
Debug.Print b(i)
Next iEnd Sub
3)根据公式转换
这是徐景周的c代码
void Big2GB::BigtoGB()
{
CalLineNumber(); if(m_text=="\n")
return;
for(int Line=0;Line<GetLineNumber();Line++)
{
BYTE* SourceSTR;
SourceSTR=(BYTE* )((LPCTSTR)strLine[Line]);
int size=strLine[Line].GetLength();
if(size)
{
BYTE* DestSTR=new BYTE[size+1];
unsigned i=0;
do
{
// is English 是英文字符
if(SourceSTR[i]<0xA1||(SourceSTR[i+1]<0x40))
{
DestSTR[i]=SourceSTR[i];
i++;
}
else //是BIG5的汉字码
{
DestSTR[i+1]=HIBYTE(pBIGTable[(SourceSTR[i]-0xA1)*0xBF+SourceSTR[i+1]-0x40]);
DestSTR[i]=LOBYTE(pBIGTable[(SourceSTR[i]-0xA1)*0xBF+SourceSTR[i+1]-0x40]);
i+=2;
}
}
while(i<strlen((char*)(SourceSTR)));
DestSTR[i]='\0'; strLine[Line]=DestSTR;
delete DestSTR;
}
}
}void Big2GB::GBtoBig()
{
CalLineNumber(); if(m_text=="\n")
return;
for(int Line=0;Line<GetLineNumber();Line++)
{
BYTE* SourceSTR;
SourceSTR=(BYTE* )((LPCTSTR)strLine[Line]);
int size=strLine[Line].GetLength();
if(size)
{
BYTE* DestSTR=new BYTE[size+1];
unsigned i=0;
do
{
// is English 是英文字符
if(SourceSTR[i]<0xA1||(SourceSTR[i+1]<0xA1))
{
DestSTR[i]=SourceSTR[i];
i++;
}
else if(SourceSTR[i]>0xA1&&SourceSTR[i]<0xB0) //是GB2312的汉字码
{
DestSTR[i+1]=HIBYTE(pGBTable[(SourceSTR[i]-0xA1)*0x5E+SourceSTR[i+1]-0xA1]);
DestSTR[i]=LOBYTE(pGBTable[(SourceSTR[i]-0xA1)*0x5E+SourceSTR[i+1]-0xA1]);
i+=2;
}
else
{
DestSTR[i+1]=HIBYTE(pGBTable[(SourceSTR[i]-0xA7)*0x5E+SourceSTR[i+1]-0xA1]);
DestSTR[i]=LOBYTE(pGBTable[(SourceSTR[i]-0xA7)*0x5E+SourceSTR[i+1]-0xA1]);
i+=2;
}
}
while(i<strlen((char*)(SourceSTR)));
DestSTR[i]='\0'; strLine[Line]=DestSTR;
delete DestSTR;
}
}}
4)把byte数组转换成字符串
Dim strC as string
Dim intI as long
Open file fot binary as #1
ReDim bytbuf(1 To LOF(1)) As Byte
Get #1, , bytbuf()
Close #1
'将byte数组转化成string
strC=bytbuf()
pring strC
’将byte数组放为0xC3的形式。
For intI = LBound(bytbuf) To UBound(bytbuf)
If Len(Hex(bytbuf(intI))) = 1 Then
bytbuf(intI) = "0x0" & Hex(bytbuf(intI))
Else
bytbuf(intI) = "0x" & Hex(bytbuf(intI))
End If
DoEvents
Next intI
5)写入文件
把TextBox内容写入文本文件:
Dim TempFile As Long
Dim SaveBytes() As ByteSaveBytes=StrConv(Text1.Text,vbFromUniCode)TempFile=FreeFile
Open 文件名 For Binary As #TempFile
Put #TempFile,,SaveBytes
Close TempFile