看看以前写的URLencode函数,竟然已经是5年多前了,希望真的能帮助到有需要的人,不过也不知道现在还有多少人还用VB6开发呢。
好像还是每次都是差不多的过程,先是百度上搜,搜来搜去不好用,最后用google一搜就非常容易搜到了,另外排第一的竟然还是我关于URLencode的那篇文章,心中有点窃喜。
好了,下面上源码吧,是来自于外国网站类似与百度知道,基本上是程序交流的stackoverflow.com,全文网址为:
https://stackoverflow.com/questions/29980993/how-can-i-decode-utf8-in-visual-basic-6
采用的是第二个答案,代码如下:
'------------------------------------------------------------------
' NAME: DecodeURI (PUBLIC)
' DESCRIPTION: Decodes a UTF8 encoded string
' CALLED BY: HandleNavigate
' PARAMETERS:
' EncodedURL (I,REQ) - the UTF-8 encoded string to decode
' RETURNS: the the decoded UTF-8 string
'------------------------------------------------------------------
Private Function DecodeURI(ByVal EncodedURI As String) As String
Dim bANSI() As Byte
Dim bUTF8() As Byte
Dim lIndex As Long
Dim lUTFIndex As Long
If Len(EncodedURI) = 0 Then
Exit Function
End If
EncodedURI = Replace$(EncodedURI, "+", " ") ' In case encoding isn't used.
bANSI = StrConv(EncodedURI, vbFromUnicode) ' Convert from unicode text to ANSI values
ReDim bUTF8(UBound(bANSI)) ' Declare dynamic array, get length
For lIndex = 0 To UBound(bANSI) ' from 0 to length of ANSI
If bANSI(lIndex) = &H25 Then ' If we have ASCII 37, %, then
bUTF8(lUTFIndex) = Val("&H" & Mid$(EncodedURI, lIndex + 2, 2)) ' convert hex to ANSI
lIndex = lIndex + 2 ' this character was encoded into two bytes
Else
bUTF8(lUTFIndex) = bANSI(lIndex) ' otherwise don't need to do anything special
End If
lUTFIndex = lUTFIndex + 1 ' advance utf index
Next
DecodeURI = FromUTF8(bUTF8, lUTFIndex) ' convert to string
End Function
'------------------------------------------------------------------
' NAME: FromUTF8 (Private)
' DESCRIPTION: Use the system call MultiByteToWideChar to
' get chars using more than one byte and return
' return the whole string
' CALLED BY: DecodeURI
' PARAMETERS:
' UTF8 (I,REQ) - the ID of the element to return
' Length (I,REQ) - length of the string
' RETURNS: the full raw data of this field
'------------------------------------------------------------------
Private Function FromUTF8(ByRef UTF8() As Byte, ByVal Length As Long) As String
Dim lDataLength As Long
lDataLength = MultiByteToWideChar(CP_UTF8, 0, VarPtr(UTF8(0)), Length, 0, 0) ' Get the length of the data.
FromUTF8 = String$(lDataLength, 0) ' Create array big enough
MultiByteToWideChar CP_UTF8, 0, VarPtr(UTF8(0)), _
Length, StrPtr(FromUTF8), lDataLength '
End Function
然后调用DecodeURI函数即可。
正文完