VB如何把汉字和字母转换成utf8字符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB如何把汉字和字母转换成utf8字符?相关的知识,希望对你有一定的参考价值。

求代码

参考方法如下:

面的两段VB代码分别针对UTF-8(UTF8EncodeURI)和GB2312(GBKEncodeURI)进行了编码的转换。
Private Sub command1_click()
Debug.Print (UTF8EncodeURI("汉字"))
Debug.Print (GBKEncodeURI("汉字"))
End Sub

Function UTF8EncodeURI(szInput)
Dim wch, uch, szRet
Dim x
Dim nAsc, nAsc2, nAsc3
If szInput = "" Then
UTF8EncodeURI = szInput
Exit Function
End If
For x = 1 To Len(szInput)
wch = Mid(szInput, x, 1)
nAsc = AscW(wch)
If nAsc < 0 Then nAsc = nAsc + 65536
If (nAsc And &HFF80) = 0 Then
szRet = szRet & wch
Else
If (nAsc And &HF000) = 0 Then
uch = "%" & Hex(((nAsc \\ 2 ^ 6)) Or &HC0) & Hex(nAsc And &H3F Or &H80)
szRet = szRet & uch
Else
uch = "%" & Hex((nAsc \\ 2 ^ 12) Or &HE0) & "%" & _
Hex((nAsc \\ 2 ^ 6) And &H3F Or &H80) & "%" & _
Hex(nAsc And &H3F Or &H80)
szRet = szRet & uch
End If
End If
Next
UTF8EncodeURI = szRet
End Function
Function GBKEncodeURI(szInput)
Dim i As Long
Dim x() As Byte
Dim szRet As String
szRet = ""
x = StrConv(szInput, vbFromUnicode)
For i = LBound(x) To UBound(x)
szRet = szRet & "%" & Hex(x(i))
Next
GBKEncodeURI = szRet
End Function
参考技术A

这个图片清楚的说明了UNICODE与UTF8编码的联系

追问

看不懂,好深奥

追答

拿“水”这个字来说,水的UTF编码前8位是1110+水的UNICODE编码高8位中的前4位,中8位是10+水的UNICODE编码高8位中的后4位+水的UNICODE编码低8位中的前2位,后8位是10+水的UNICODE编码低8位中的后6位

参考技术B 看这里追问

我要是的是汉字转utf8- - .能帮我改下么

参考资料:http://blog.163.com/hwb_1988/blog/static/1756781272010113104947878/

参考技术C 汉字和字母转UTF8字符?
应该不是这吧?是不是你弄错了啊~追问

我怎么会弄错- -。

追答

uft8是一种字符集编码,而非像你所说的
我想你所说的应该是汉字和字母转化为ascii码吧~

追问

拿比如说石柱的编码是%E7%9F%B3%E6%9F%B1
那漫的编码怎么得出~

追答


document.write(decodeURI("%E7%9F%B3%E6%9F%B1"))

追问

你那个是怎么得来的。。。求解
是什么的代码啊?

追答

晕,原来你问的是VB,我用的是JS,直接把以上代码保存为:*.html双击运行即可知道!
如果在VB之中没有这个函数,得编写一个函数,函数如下:

Function UTF8EncodeURI(szInput)
Dim wch, uch, szRet
Dim x
Dim nAsc, nAsc2, nAsc3
If szInput = "" Then
UTF8EncodeURI = szInput
Exit Function
End If
For x = 1 To Len(szInput)
wch = Mid(szInput, x, 1)
nAsc = AscW(wch)
If nAsc < 0 Then nAsc = nAsc + 65536
If (nAsc And &HFF80) = 0 Then
szRet = szRet & wch
Else
If (nAsc And &HF000) = 0 Then
uch = "%" & Hex(((nAsc \ 2 ^ 6)) Or &HC0) & Hex(nAsc And &H3F Or &H80)
szRet = szRet & uch
Else
uch = "%" & Hex((nAsc \ 2 ^ 12) Or &HE0) & "%" & _
Hex((nAsc \ 2 ^ 6) And &H3F Or &H80) & "%" & _
Hex(nAsc And &H3F Or &H80)
szRet = szRet & uch
End If
End If
Next
UTF8EncodeURI = szRet
End Function

追问

怎么调用这个函数把text1你的文字转换到text2呢,我调用他提示子程序和函数未定义。。

追答

把该函数直接写在VB之中,然后直接调用UTF8EncodeURI(text1的值)

本回答被提问者采纳

取指定的字符串,字符串里面有汉字和字母

技术分享

解决这个问题之前,我们须要了解的是,在GBK字符集的编码中汉字占2个字节。字母和其它字符占一个字节,而在utf-8中汉字占3,或者4个字节,字母占2个字节,因为,utf一下占2个3个字节。一下占4个字节,不好拆分出指定的汉字加字母。所以才用gbk的编码格式,汉字占2个字节,字母一个字节。

在把汉字转换成字节的时候。输出的字节的值小于0,字母转换成字节的时候,输出的值就是其相应的数字。

在String对象中。它的长度计算,是汉字算一个,字母也算一个

代码例如以下:

package com.wj.demo1;


public class SplitChinese {


/**
* @param args
*/
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub


String st1="我a爱中华abc我爱传智def";
String st2="a我ABC汉a";//定义的測试字符串
String st3="ac23好11";
System.out.println("str is "+st2.length());//无论是否是汉字。都仅仅占用一个字节,得到字符串的长度
int num=trimGBK(st2.getBytes("GBK"),2);//得到应该截取的长度
System.out.println(st2.substring(0, num));//输出指定的截取长度
}


public static int trimGBK(byte[] buf,int n){
int num=0;//标志变量,截取的长度
boolean bChineseFirstHalf=false;//标志是否出现汉字
System.out.println("the buf size is :"+buf.length);
for(int i=0;i<n;i++){
System.out.println("byte[i]="+buf[i]);//打印相应的字节的值
if(buf[i]<0&&!bChineseFirstHalf){//假设buf[i]<0则为汉字。假设是首次出现的汉字字节则设置为true
bChineseFirstHalf=true;//2个字节的汉字首,出现的汉字字节
}else{
num++;//累加,记录应该截取的长度
bChineseFirstHalf=false;
}
}
return num;//返回截取的长度
}



}



int num=trimGBK(st2.getBytes("GBK"),2);/的时候输出为

str is 7
the buf size is :9
byte[i]=97
byte[i]=-50
a


int num=trimGBK(st2.getBytes("GBK"),1);/的时候输出为

str is 7
the buf size is :9
byte[i]=97
a

int num=trimGBK(st2.getBytes("GBK"),3);/的时候输出为

str is 7
the buf size is :9
byte[i]=97
byte[i]=-50
byte[i]=-46
a我


int num=trimGBK(st2.getBytes("GBK"),4);/的时候输出为

str is 7
the buf size is :9
byte[i]=97
byte[i]=-50
byte[i]=-46
byte[i]=65
a我A


int num=trimGBK(st2.getBytes("GBK"),6);/的时候输出为

str is 7
the buf size is :9
byte[i]=97
byte[i]=-50
byte[i]=-46
byte[i]=65
byte[i]=66
byte[i]=67
a我ABC



int num=trimGBK(st2.getBytes("GBK"),7);/的时候输出为

str is 7
the buf size is :9
byte[i]=97
byte[i]=-50
byte[i]=-46
byte[i]=65
byte[i]=66
byte[i]=67
byte[i]=-70
a我ABC


int num=trimGBK(st2.getBytes("GBK"),8);/的时候输出为

str is 7
the buf size is :9
byte[i]=97
byte[i]=-50
byte[i]=-46
byte[i]=65
byte[i]=66
byte[i]=67
byte[i]=-70
byte[i]=-70
a我ABC汉


int num=trimGBK(st2.getBytes("GBK"),9);/的时候输出为

str is 7
the buf size is :9
byte[i]=97
byte[i]=-50
byte[i]=-46
byte[i]=65
byte[i]=66
byte[i]=67
byte[i]=-70
byte[i]=-70
byte[i]=97
a我ABC汉a




























































































































































































以上是关于VB如何把汉字和字母转换成utf8字符?的主要内容,如果未能解决你的问题,请参考以下文章

易语言如何把GBK编码转换成UTF8?好的追加50

WORD2010如何把全角字母和数字批量转换成半角

如何将unicode转换成汉字

如何将unicode字符转换成汉字?

php数组转换成json格式后汉字怎么就被解析成字母了啊

Python 将中文字母转成数字