+ -
当前位置:首页 → 问答吧 → UTF8的url解码问题%C2%B7这个中文符号转换错误

UTF8的url解码问题%C2%B7这个中文符号转换错误

时间:2011-12-06

来源:互联网

Public Function UTF8_URLEncoding(szInput)
  Dim wch, uch, szRet
  Dim x
  Dim nAsc, nAsc2, nAsc3
  If szInput = "" Then
  UTF8_URLEncoding = 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
  UTF8_URLEncoding = szRet
End Function

Public Function UTF8_UrlDecode(ByVal URL As String)
'On Error Resume Next
  Dim B, ub ''中文字的Unicode码(2字节)
  Dim UtfB ''Utf-8单个字节
  Dim UtfB1, UtfB2, UtfB3 ''Utf-8码的三个字节
  Dim i, n, s
  n = 0
  ub = 0
  For i = 1 To Len(URL)
  B = Mid(URL, i, 1)
  Select Case B
  Case "+"
  s = s & " "
  Case "%"
  ub = Mid(URL, i + 1, 2)
  UtfB = CInt("&H" & ub)
  If UtfB < 128 Then
  i = i + 2
  s = s & ChrW(UtfB)
  Else
  UtfB1 = (UtfB And &HF) * &H1000 ''取第1个Utf-8字节的二进制后4位
  UtfB2 = (CInt("&H" & Mid(URL, i + 4, 2)) And &H3F) * &H40 ''取第2个Utf-8字节的二进制后6位
   
  UtfB3 = CInt("&H" & Mid(URL, i + 7, 2)) And &H3F ''取第3个Utf-8字节的二进制后6位
  s = s & ChrW(UtfB1 Or UtfB2 Or UtfB3)
  i = i + 8
  End If
  Case Else ''Ascii码
  s = s & B
  End Select
  Next
  UTF8_UrlDecode = s
End Function




上面两段代码,UTF8_URLEncoding输入字符“·”这个中文符号,转换出来是%C2B7(实际是%C2%B7),用UTF8_UrlDecode解码“%C2%B7“提示类型不对,出错中断。。。

不知道是不是代码有错。求救。。。。

作者: banking1983   发布时间: 2011-12-06

有没人帮忙看看

作者: banking1983   发布时间: 2011-12-07

热门下载

更多