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