Android: how to parse URL String with spaces to URI object?

前端 未结 5 1497
孤城傲影
孤城傲影 2020-11-27 03:52

I have a string representing an URL containing spaces and want to convert it to an URI object. If I simply try to create it via

String myString = \"http://my         


        
5条回答
  •  我在风中等你
    2020-11-27 04:05

    You should in fact URI-encode the "invalid" characters. Since the string actually contains the complete URL, it's hard to properly URI-encode it. You don't know which slashes / should be taken into account and which not. You cannot predict that on a raw String beforehand. The problem really needs to be solved at a higher level. Where does that String come from? Is it hardcoded? Then just change it yourself accordingly. Does it come in as user input? Validate it and show error, let the user solve itself.

    At any way, if you can ensure that it are only the spaces in URLs which makes it invalid, then you can also just do a string-by-string replace with %20:

    URI uri = new URI(string.replace(" ", "%20"));
    

    Or if you can ensure that it's only the part after the last slash which needs to be URI-encoded, then you can also just do so with help of android.net.Uri utility class:

    int pos = string.lastIndexOf('/') + 1;
    URI uri = new URI(string.substring(0, pos) + Uri.encode(string.substring(pos)));
    

    Do note that URLEncoder is insuitable for the task as it's designed to encode query string parameter names/values as per application/x-www-form-urlencoded rules (as used in HTML forms). See also Java URL encoding of query string parameters.

提交回复
热议问题