Warm tip: This article is reproduced from stackoverflow.com, please click
utf-8 vb6 urlencode

How to decode a (percent encoding URL) that contains Arabic characters?

发布于 2020-04-23 16:34:06

I want to convert percent-encoding URLs in all languages but vb6 only supports English.

I have tested the following code. but it can only convert English characters:

Private Sub Form_Load()
    THE_ARABIC_URL = "%D8%AF%D8%B4%D9%85%D9%86%DB%8C+%D8%AF%D8%B1+%D8%A7%D8%B9%D9%85%D8%A7%D9%82-2019-12-09+01%3A09%3A00"
    MsgBox URLDecode(THE_ARABIC_URL)
End Sub

Private Function URLDecode(ByVal txt As String) As String
    Dim txt_len As Integer
    Dim i As Integer
    Dim ch As String
    Dim digits As String
    Dim result As String

    result = ""
    txt_len = Len(txt)
    i = 1
    Do While i <= txt_len
        ' Examine the next character.
        ch = Mid$(txt, i, 1)
        If ch = "+" Then
            ' Convert to space character.
            result = result & " "
        ElseIf ch <> "%" Then
            ' Normal character.
            result = result & ch
        ElseIf i > txt_len - 2 Then
            ' No room for two following digits.
            result = result & ch
        Else
            ' Get the next two hex digits.
            digits = Mid$(txt, i + 1, 2)
            result = result & Chr$(CInt("&H" & digits))
            i = i + 2
        End If
        i = i + 1
    Loop

    URLDecode = result
End Function

Source: VB Helper.

Questioner
Mahdi Jazini
Viewed
31
Ahmed Abdelhameed 2019-12-09 22:43

If you want to do it manually, you'll have to write a function with UTF-8 support. However, there's an easier way which is to rely on the JScript engine using an MSScriptControl.ScriptControl object. You could use the function from this answer.

Here's a complete example:

Public JSEngine

Public Sub InitializeJSEngine()
    Set JSEngine = CreateObject("MSScriptControl.ScriptControl")
    JSEngine.Language = "JScript"
End Sub

Function UrlDecode(s) As String
    UrlDecode = Replace(s, "+", " ")
    UrlDecode = JSEngine.CodeObject.decodeURIComponent(UrlDecode)
End Function

Private Sub Form_Load()
    ' Make sure this is called before calling `UrlDecode`.
    InitializeJSEngine
End Sub

Private Sub btnDecode_Click()
    ' Prints: "دشمني در اعماق-2019-12-09 01:09:00"
    ' ..which is Persian, not Arabic ;‑)
    Debug.Print UrlDecode("%D8%AF%D8%B4%D9%85%D9%86%DB%8C+%D8%AF%D8%B1+%D8%A7%D8%B9%D9%85%D8%A7%D9%82-2019-12-09+01%3A09%3A00")
End Sub