2014-10-21 35 views
0

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

我已经通过Loopj代码,并找不到任何相关的重新编码我的字符串或任何类似的东西。在最糟糕的情况下,它似乎会以UTF-8编码,它实际上支持这些字符。

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

最好的问候。

+0

我相信匈牙利字符因为编码不匹配而混乱。 – 2014-10-22 00:26:28

+0

请提供构建http请求的代码 – slf 2014-10-30 14:30:55

+0

请包含一些代码,以便我们可以帮助您 – Hamad 2014-10-31 05:23:35

回答

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

+0

是的,使用上述方法可能有效,但这不是OP所要求的;他们想知道如何使用AsyncHttpClient解决问题;不是家庭解决方案。 也许OP必须使用LoopJ?例如,我在我的项目中使用LoopJ,并遇到同样的问题。当LoopJ应该能够处理这个时,我不会重写所有的API代码。 – SuperStubbs 2016-07-21 19:31:58

3

我猜你的意思是AsyncHttpClient库,是否正确?

AHC默认使用UTF-8编码所有I/O。由于缺乏源代码,我想指出你去调查下:

  1. 什么是编码输入?确保它是UTF-8。
  2. 您是否正在运行通过筛选器的输入/函数可能会更改其编码?确保过滤器/函数也生成UTF-8。
  3. 在检查您的后端实际收到的内容之前,将您的客户端更改为提交至http://httpbin.org/post然后检查结果。
  4. 如果您收到正确提交的httpbin和提交在后端,这个问题是不是在AHC但在后端。
  5. 如果您收到这两个httpbin和后端提交,则发送的数据为原本糟糕或在错误的编码

我希望这可以帮助您快速找到问题。