Search code examples
androidgoogle-app-engineurlurl-encodingurldecode

Mystery URL decoding of certain characters - Android URI / Google App Engine


I am having a curious problem that perhaps someone has insight into. I encode a query string into a URL on Android using the following code:

request = REQUEST_BASE + "?action=loadauthor&author=" + URLEncoder.encode(author, "UTF-8");

I then add a few other parameters to the string and create a URI like this:

uri = new URI(request);

At a certain point, I pull out the query string to make a checksum:

uri.getRawQuery().getBytes();

Then I send it on its way with:

HttpGet get = new HttpGet(uri);

On the Appengine server, I then retrieve the string and try to match the checksum:

String query = req.getQueryString();

Normally, this works fine. However, there are a few characters that seem to get unencoded on the way to the server. For example,

action=loadauthor&author=Charles+Alexander+%28Ohiyesa%29+Eastman&timestamp=1343261225838&user=1479845600

shows up in the server logs (and in the GAE app) as:

action=loadauthor&author=Charles+Alexander+(Ohiyesa)+Eastman&timestamp=1343261226837&user=1479845600

This only happens to a few characters (like parentheses). Other characters remain encoded all the way through. Does anyone have a thought about what I might be doing wrong? Any feedback is appreciated.


Solution

  • I never did find a solution for this problem. I worked around it by unencoding certain characters on the client before sending things to the server:

    request = request.replace("%28", "(");
    request = request.replace("%29", ")");
    request = request.replace("%27", "'");
    

    If anyone has a better solution, I am sure that I (and others) would be interested!