This task   (the reverse of   URL encoding   and distinct from   URL parser)   is to provide a function
or mechanism to convert an URL-encoded string into its original unencoded form.



Test cases

   The encoded string   "http%3A%2F%2Ffoo%20bar%2F"   should be reverted to the unencoded form   "http://foo bar/".
   The encoded string   "google.com/search?q=%60Abdu%27l-Bah%C3%A1"   should revert to the unencoded form   "google.com/search?q=`Abdu'l-Bahá".


import "/fmt" for Conv
 
var urlDecode = Fn.new { |enc|
    var res = ""
    var i = 0
    while (i < enc.count) {
        var c = enc[i]
        if (c == "\%") {
            var b = Conv.atoi(enc[i+1..i+2], 16)
            res = res + String.fromByte(b)
            i = i + 3
        } else {
            res = res + c
            i = i + 1
        }
    }
    return res
}
 
// We need to escape % characters in Wren as % is otherwise used for string interpolation.
var encs = [
    "http\%3A\%2F\%2Ffoo\%20bar\%2F",
    "google.com/search?q=\%60Abdu\%27l-Bah\%C3\%A1"
]
for (enc in encs)System.print(urlDecode.call(enc))