引用Microsoft Script Control Function Escape1(sIn As String, Optional fReverse As Boolean = False) As String Dim oSC As New ScriptControl With oSC .language = "JScript" If fReverse Then Escape1 = .Eval("decodeURI(""" & sIn & """)") Else Escape1 = .Eval("encodeURI(""" & sIn & """)") End If End With End Function
Private Sub Form_Load() Debug.Print Escape1("十分之后") Debug.Print Escape1("%E5%8D%81%E5%88%86%E4%B9%8B%E5%90%8E", True) End Sub Function Escape1(sIn As String, Optional fReverse As Boolean = False) As String Dim oSC As New ScriptControl With oSC .language = "JScript" If fReverse Then Escape1 = .Eval("decodeURI(""" & sIn & """)") Else Escape1 = .Eval("encodeURI(""" & sIn & """)") End If End With End Function
想了一下,还可以这样 Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long Public 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 Public Const CP_UTF8 = 65001Public Function EncodeURI(ByVal s As String) As String Dim i As Long Dim lLength As Long Dim lBufferSize As Long Dim lResult As Long Dim abUTF8() As Byte
EncodeURI = "" lLength = Len(s) If lLength = 0 Then Exit Function lBufferSize = lLength * 3 + 1 ReDim abUTF8(lBufferSize - 1)
If lResult <> 0 Then lResult = lResult - 1 ReDim Preserve abUTF8(lResult) For i = LBound(abUTF8) To UBound(abUTF8) EncodeURI = EncodeURI & "%" & Hex(abUTF8(i)) Next End If End FunctionPublic Function DecodeURI(ByVal s As String) As String On Error Resume Next Dim lRet As Long Dim lLength As Long Dim lBufferSize As Long Dim abUTF8() As Byte
Dim i As Long Dim v As Variant v = Split(s, "%")
lLength = UBound(v)
If lLength <= 0 Then Exit Function
ReDim abUTF8(lLength - 1)
For i = 0 To lLength - 1 abUTF8(i) = CByte("&H" & v(i + 1)) Next
Dim oSC As New ScriptControl
With oSC
.language = "JScript"
If fReverse Then
Escape1 = .Eval("decodeURI(""" & sIn & """)")
Else
Escape1 = .Eval("encodeURI(""" & sIn & """)")
End If
End With
End Function
debug.print escape1("十分之后")显示
"%e5%8d%81%e5%88%86%e4%b9%8b%e5%90%8e"
Debug.Print Escape1("十分之后")
Debug.Print Escape1("%E5%8D%81%E5%88%86%E4%B9%8B%E5%90%8E", True)
End Sub
Function Escape1(sIn As String, Optional fReverse As Boolean = False) As String
Dim oSC As New ScriptControl
With oSC
.language = "JScript"
If fReverse Then
Escape1 = .Eval("decodeURI(""" & sIn & """)")
Else
Escape1 = .Eval("encodeURI(""" & sIn & """)")
End If
End With
End Function
Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Public 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
Public Const CP_UTF8 = 65001Public Function EncodeURI(ByVal s As String) As String
Dim i As Long
Dim lLength As Long
Dim lBufferSize As Long
Dim lResult As Long
Dim abUTF8() As Byte
EncodeURI = ""
lLength = Len(s)
If lLength = 0 Then Exit Function
lBufferSize = lLength * 3 + 1
ReDim abUTF8(lBufferSize - 1)
lResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(s), lLength, abUTF8(0), lBufferSize, vbNullString, 0)
If lResult <> 0 Then
lResult = lResult - 1
ReDim Preserve abUTF8(lResult)
For i = LBound(abUTF8) To UBound(abUTF8)
EncodeURI = EncodeURI & "%" & Hex(abUTF8(i))
Next
End If
End FunctionPublic Function DecodeURI(ByVal s As String) As String
On Error Resume Next
Dim lRet As Long
Dim lLength As Long
Dim lBufferSize As Long
Dim abUTF8() As Byte
Dim i As Long
Dim v As Variant
v = Split(s, "%")
lLength = UBound(v)
If lLength <= 0 Then Exit Function
ReDim abUTF8(lLength - 1)
For i = 0 To lLength - 1
abUTF8(i) = CByte("&H" & v(i + 1))
Next
lBufferSize = lLength * 2
DecodeURI = String$(lBufferSize, Chr(0))
lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(abUTF8(0)), lLength, StrPtr(DecodeURI), lBufferSize)
If lRet <> 0 Then
DecodeURI = Left(DecodeURI, lRet)
End If
End Function