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 post/put 时的 Android 默认字符集 - 特殊字符问题

于 2014-10-31T05:29:38.653 回答