0

http リクエストを介して特殊文字を送信しようとしています。現在、Loopj を http クライアントとして使用しています。問題は、特殊文字、つまり「áéíóú」を送信しようとすると、「·ÈÌÛ˙」という文字でリクエストが送信され、サーバー側で問題が発生することです。

私は Loopj コードを調べましたが、文字列の再コーディングなどに関連するものは何も見つかりませんでした。最悪の場合、実際にこの文字をサポートする UTF-8 でエンコードされるようです。

誰でも助けてくれることを願っています。

よろしくお願いします。

4

2 に答える 2

3

AsyncHttpClient ライブラリのことだと思いますよね?

AHC はデフォルトで、すべての I/O を UTF-8 でエンコードします。ソースコードが不足しているため、次のことを調査することをお勧めします。

  1. 入力のエンコーディングは何ですか?UTF-8であることを確認してください。
  2. エンコーディングを変更する可能性のあるフィルター/関数を介して入力を実行していますか? フィルター/関数が UTF-8 も生成することを確認してください。
  3. バックエンドが実際に受け取るものを確認する前に、クライアントを変更してhttp://httpbin.org/postに送信し 、結果を確認します。
  4. httpbin で正しく送信され、バックエンドで正しく送信されない場合、問題はAHCではなくバックエンドにあります。
  5. httpbin とバックエンドの両方で不正な送信を受信した場合、送信されたデータはもともと不正あるか、間違ったエンコーディングでした。

これが問題の迅速な発見に役立つことを願っています。

于 2014-10-31T12:53:01.257 に答える
0

このアプローチを使用しない理由:

HttpParams httpParameters = new BasicHttpParams();
HttpProtocolParams.setContentCharset(httpParameters, HTTP.UTF_8);
HttpProtocolParams.setHttpElementCharset(httpParameters, HTTP.UTF_8);

HttpClient client = new DefaultHttpClient(httpParameters);
client.getParams().setParameter("http.protocol.version", HttpVersion.HTTP_1_1);
client.getParams().setParameter("http.socket.timeout", new Integer(2000));
client.getParams().setParameter("http.protocol.content-charset", HTTP.UTF_8);
httpParameters.setBooleanParameter("http.protocol.expect-continue", false);
HttpPost request = new HttpPost("http://www.server.com/some_script.php?sid=" + String.valueOf(Math.random()));
request.getParams().setParameter("http.socket.timeout", new Integer(5000));

List<NameValuePair> postParameters = new ArrayList<NameValuePair>();
// you get this later in php with $_POST['value_name']
postParameters.add(new BasicNameValuePair("value_name", "value_val"));

UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters, HTTP.UTF_8);
request.setEntity(formEntity);
HttpResponse response = client.execute(request);

in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
String lineSeparator = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
    sb.append(line);
    sb.append(lineSeparator);
}
in.close();
String result = sb.toString();

上記のコードのユーザーは、このコードは魅力的に機能すると言います。また、アプローチに問題がある場合は、問題を解決するためにアプローチを変更する必要があると思います。私があなたに役立つと思ったこのリンクを参照してください:httpポスト/プットを送信するときのAndroidのデフォルトの文字セット - 特殊文字の問題

于 2014-10-31T05:29:38.653 に答える