Loopj在发送请求之前弄乱特殊字符

时间:2014-10-21 23:06:48

标签: android androidhttpclient loopj

我正在尝试通过http请求发送特殊字符,现在我正在使用Loopj作为我的http客户端。问题是,当我尝试发送特殊字符,即“áéíóú”时,请求以“·ÈÌÛ˙”字符出现,这会导致服务器端出现一些问题。

我已经浏览了Loopj代码,无法找到与重新编码我的字符串或类似内容相关的任何内容。在最坏的情况下,似乎它将以UTF-8编码,它实际上支持这些字符。

希望任何人都可以提供帮助。

最诚挚的问候。

2 个答案:

答案 0 :(得分:3)

我猜您的意思是AsyncHttpClient库,对吗?

AHC默认以UTF-8编码所有I / O.由于缺乏源代码,我会指出您调查以下内容:

  1. 输入的编码是什么?确保它是UTF-8。
  2. 您是否通过可能会更改其编码的过滤器 / 功能运行输入?确保过滤器/功能也产生UTF-8。
  3. 在检查您的后端实际收到的内容之前,请将您的客户更改为提交至 http://httpbin.org/post,然后检查结果。
  4. 如果您在httpbin中收到正确的提交,并在后端收到错误提交,则问题是不在AHC ,而在您的后端。
  5. 如果您在httpbin和后端都收到错误提交内容,则发送的数据最初错误错误编码
  6. 我希望这可以帮助您快速找到问题。

答案 1 :(得分: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();

上述代码的用户说,这段代码就像魅力一样。我认为,如果您遇到问题,那么您应该改变解决问题的方法。 请参阅我认为对您有用的链接:Android default charset when sending http post/put - Problems with special characters