1

おそらく誰かが洞察している興味深い問題があります。次のコードを使用して、クエリ文字列を Android の URL にエンコードします。

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

次に、他のいくつかのパラメーターを文字列に追加し、次のような URI を作成します。

uri = new URI(request);

ある時点で、クエリ文字列を取り出してチェックサムを作成します。

uri.getRawQuery().getBytes();

次に、次の方法で送信します。

HttpGet get = new HttpGet(uri);

次に、Appengine サーバーで文字列を取得し、チェックサムとの照合を試みます。

String query = req.getQueryString();

通常、これで問題なく動作します。ただし、サーバーへの途中でエンコードされていないように見える文字がいくつかあります。例えば、

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

サーバーログ (および GAE アプリ) に次のように表示されます。

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

これは、いくつかの文字 (括弧など) でのみ発生します。他の文字はずっとエンコードされたままです。私が間違っているかもしれないことについて誰かが考えていますか? フィードバックをお待ちしております。

4

2 に答える 2

1

この問題の解決策は見つかりませんでした。サーバーに送信する前に、クライアントで特定の文字のエンコードを解除することで、この問題を回避しました。

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

誰かがより良い解決策を持っている場合、私 (および他の人) が興味を持っていると確信しています!

于 2012-08-05T22:49:38.220 に答える
0

URLEncoder は、括弧やその他の特定の文字をエンコードしません。これは、ほとんどのサーバーで「安全」であると想定されているためです。URLEncoderを参照してください。必要に応じて、これらを自分で交換する必要があります。

例:

URI uri = new URI(request.replace("(","%28"));

多くの置換が必要な場合は、 request.replaceAll(String regularExpression, String replacement) を試すことができます。もちろん、これには正規表現の知識が必要です。

于 2012-07-26T08:34:27.957 に答える