VB将汉字字符串转换成 UTF-8格式

VB将汉字字符串转换成 UTF-8格式后按照JSON格式提交给服务器,偶数个汉字没有问题,但奇数个汉字时,会有问题,请大师指导。

Private Declare Function MultiByteToWideChar Lib "kernel32 " (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Declare Function WideCharToMultiByte Lib "kernel32 " (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
Private Const CP_ACP = 0 ' default to ANSI code page
Private Const CP_UTF8 = 65001 ' default to UTF-8 code page
Dim su As String
'字符转 UTF8
Public Function EncodeToBytes(ByVal sData As String) As Byte() ' Note: Len(sData) > 0
Dim aRetn() As Byte
Dim nSize As Long
nSize = WideCharToMultiByte(CP_UTF8, 0, StrPtr(sData), -1, 0, 0, 0, 0) - 1
If nSize = 0 Then Exit Function
ReDim aRetn(0 To nSize - 1) As Byte
WideCharToMultiByte CP_UTF8, 0, StrPtr(sData), -1, VarPtr(aRetn(0)), nSize, 0, 0
EncodeToBytes = aRetn
Erase aRetn

End Function

' UTF8 转字符
Public Function DecodeToBytes(ByVal sData As String) As Byte() ' Note: Len(sData) > 0
Dim aRetn() As Byte
Dim nSize As Long
nSize = MultiByteToWideChar(CP_UTF8, 0, StrPtr(sData), -1, 0, 0) - 1
If nSize = 0 Then Exit Function
ReDim aRetn(0 To 2 * nSize - 1) As Byte
MultiByteToWideChar CP_UTF8, 0, StrPtr(sData), -1, VarPtr(aRetn(0)), nSize
DecodeToBytes = aRetn
Erase aRetn

End Function

Private Sub Command1_Click()

Dim i As Integer
Dim s As String
Dim mBuff()   As Byte

Text1 = StrConv(EncodeToBytes("中国人"), vbUnicode) '将utf编码的数组转VB可处理字符

End Sub

Private Sub Command2_Click()
Text1 = DecodeToBytes(StrConv(Text1, vbFromUnicode))
End Sub

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!

相似问题

2
VB一个关于字符串生成的问题
1
VB语言一个关于字符串组合的程序
1
VB语言通过ByRef修改字符串指针传递参数给C++的正确做法
1
几个关于Visula Basic语言的字符串类型的问题
1
VB字符串如何来分配内存?使用string以前怎么内存预分配
2
有关VB的字符串内存分配的问题
1
VB6.0怎么拿到C++ BSTR链接字符串
1
VB6.0语言中关于布尔表达式转换成字符串的问题
1
怎么清除字符串中位于结尾出的乱码呢?VB有没有自动过滤字符串乱码的函数?
3
使用vb的字符串出现除不尽的小数,就没有办法判断浮点数的精度了
1
vb.net字符分割问题-----
1
vb语言中怎么区分一个字符串是不是正好是它里面字符的长度呢?
1
怎么判断一个vb的字符串是定长的,定长的字符串和字符数组的关系是什么?
1
怎么判断和修改vb字符串中的某个字符?
1
vb的字符串能不能动态修改,用replace函数能设置修改的位置呢?
2
部分地修改一个字符串的内容,不是从头修改,vb的字符串怎么实现,能不能只改变几个字符
1
请教vb创建好了字符串,现在想从中间对它修改,有没有类似c程序的办法?
1
vb中Variant类型调用mid函数返回的字符串还是在原来字符串里面么?
2
vb含有数字的字符串,使用mid函数怎么把其中的数字截取出来
1
如何使用dim语句对一个vb内置的字符串函数定义返回值,定义的格式是什么?