我正在尝试通过http请求发送特殊字符,现在我正在使用Loopj作为我的http客户端。问题是,当我尝试发送特殊字符,即“áéíóú”时,请求以“·ÈÌÛ˙”字符出现,这会导致服务器端出现一些问题。
我已经浏览了Loopj代码,无法找到与重新编码我的字符串或类似内容相关的任何内容。在最坏的情况下,似乎它将以UTF-8编码,它实际上支持这些字符。
希望任何人都可以提供帮助。
最诚挚的问候。
答案 0 :(得分:3)
我猜您的意思是AsyncHttpClient库,对吗?
AHC默认以UTF-8编码所有I / O.由于缺乏源代码,我会指出您调查以下内容:
我希望这可以帮助您快速找到问题。
答案 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