Sign up ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

Is there a built-in function for decoding encoded URLs in Mathematica? I would like to convert an encoded URL, for example into as attempting to directly access the encoded URL with Import[] fails.

share|improve this question
StackOverflow question: – Mr.Wizard Apr 4 '13 at 13:16

4 Answers 4

up vote 8 down vote accepted

Works nicely:

PercentDecode[s_String] := StringReplace[s, RegularExpression["%([[:xdigit:]]{2})"] :> 
                                         FromCharacterCode[FromDigits["$1", 16]]]

PercentEncode[s_String] := StringReplace[s, {" " -> "+", 
   RegularExpression["[^\\w/\\?=:._~]"] :> 
    StringJoin["%", ToUpperCase[IntegerString[First[ToCharacterCode["$0"]], 16]]]}]



share|improve this answer
Thanks for the function! Works nicely. – March Ho Apr 4 '13 at 12:39
I'm not an expert for this, and the relevant standards have changed once in a while. But concerning PercentEncode maybe is worth noting that as far as I understand the decoding should always give unambiguous results while the encoding is somewhat arbitrary: it has not always been exactly specified which characters have to be encoded and which not, the latest RFCs about this seem to be more strict. So encoding with different functions/services might give different results, but I don't think that means there is an error as long as the decoding results in the same string. – Albert Retey Apr 4 '13 at 12:51
@Albert: True, for the encoding I went with the characters that are frequently encoded by browsers. It should not be too hard to modify PercentEncode[], of course. – J. M. Apr 4 '13 at 12:55
@J.M.: to my understanding encoding is necessary for exactly those characters that are not "unreserved", everything else must be encoded if they are not to be interpreted with their "reserved" special meaning. So whether or not a character needs to be encoded depends on what they should be interpreted, if e.g. you want to send an url as an argument to a cgi script you would (unlike your PercentEncode does) need to encode "/". The uncertainty seems to be with all those characters that are not explicitly "reserved" or "unreserved"... – Albert Retey Apr 4 '13 at 14:05

There's also an internal function that does it:


At one time, the implementation of that function used J/Link code similar to Albert's code above, but now it is done in top-level Mathematica.

ExternalService`EncodeString does URL-encoding, if you want to go in the other direction.

share|improve this answer
Damn, so many undocumented functionality... :D – J. M. Apr 4 '13 at 16:29

There might be undocumented internal functions burried somewhere to do this, but it is relatively straightforward to get a result via JLink:

url = "";

see the Java documentation for more information about the package and the class. The class might also be of interest...

With the information in e.g. wikipedia about "percent encoding" and the links to the relevant RFCs it is actually not difficult to build something based on StringReplace -- as J.M.'s answer shows in a very elegant way.

share|improve this answer

URLDecode and URLEncode were introduced in Mathematica 10.0:

url = "";

The symbol definition can be accessed as follows, which is scarily close to @Guesswhoitis's code above.

ClearAttributes[URLDecode, ReadProtected];

   OptionsPattern[]]] :> 
  List @@ StringReplace[
    URLUtilities`Encoding`PackagePrivate`s, {RegularExpression[
       "%([0-9a-fA-F]{2})"] :> FromDigits["$1", 16], 
     "+" :> First[ToCharacterCode[" "]], 
     URLUtilities`Encoding`PackagePrivate`char_ :> 
share|improve this answer
Aww, I'm chuffed that I beat them to the implementation… :D The regex they picked is rather clunky-looking, tho. – J. M. Aug 12 at 1:22

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.