Java android应用程序和spring rest服务之间的httpost字符编码问题
我正试图让我的android应用程序与我的SpringRESTWeb服务对话。我正在android上制作Java android应用程序和spring rest服务之间的httpost字符编码问题,java,android,character-encoding,http-post,apache-commons-httpclient,Java,Android,Character Encoding,Http Post,Apache Commons Httpclient,我正试图让我的android应用程序与我的SpringRESTWeb服务对话。我正在android上制作httpost,代码如下。然而,我得到下面的例外。无论我为post请求的内容类型设置了什么,它都不起作用。如果我的post对象中没有非英语字符,那么它工作得很好。但是,如果存在şŞÜöÖgG等,则会给出该错误。我需要你的建议 public SowHttpUtil executeConnection(Object obj) throws Exception { try{
httpost
,代码如下。然而,我得到下面的例外。无论我为post请求的内容类型设置了什么,它都不起作用。如果我的post对象中没有非英语字符,那么它工作得很好。但是,如果存在şŞÜöÖgG等,则会给出该错误。我需要你的建议
public SowHttpUtil executeConnection(Object obj) throws Exception {
try{
HttpPost httppost = new HttpPost(serviceUrl);
if(obj != null){
StringEntity se = new StringEntity(objToString(obj));
se.setContentEncoding(HTTP.UTF_8);
se.setContentType("application/json");
httppost.setEntity(se);
}
HttpClient httpclient = new DefaultHttpClient();
//httppost.setHeader("Accept", "application/json");
//httppost.setHeader("Content-Type", "application/json;charset="+HTTP.UTF_8);
//httppost.addHeader("Accept", "application/json");
//httppost.addHeader("Content-Type", "application/json;charset="+HTTP.UTF_8);
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
if(response.getStatusLine().getStatusCode() == 200){
InputStream inStream = entity.getContent();
responseString = convertStreamToString(inStream);
}else{
Log.e("RESPONSE STATUS ERROR : " , "RSCode : "+response.getStatusLine().getStatusCode());
throw new SowException(R.string.error4);
}
} catch(HttpHostConnectException e){
throw new SowException(R.string.error4);
}
return this;
}
我在服务器端遇到的异常(spring):
你应该使用
new StringEntity(content, HTTP.UTF_8);
相反
StringEntity
的构造函数对提供的字符串和字符集调用getBytes()
(检查)。如果没有提供字符集,则使用默认字符集(而不是UTF-8)
随后调用setContentEncoding()
会更改HTTP头,但不会更改内容本身。因此,不匹配(0xfc
是无效的UTF-8)您应该使用
new StringEntity(content, HTTP.UTF_8);
相反
StringEntity
的构造函数对提供的字符串和字符集调用getBytes()
(检查)。如果没有提供字符集,则使用默认字符集(而不是UTF-8)
随后调用setContentEncoding()
会更改HTTP头,但不会更改内容本身。因此,不匹配(0xfc
是无效的UTF-8)您应该使用
new StringEntity(content, HTTP.UTF_8);
相反
StringEntity
的构造函数对提供的字符串和字符集调用getBytes()
(检查)。如果没有提供字符集,则使用默认字符集(而不是UTF-8)
随后调用setContentEncoding()
会更改HTTP头,但不会更改内容本身。因此,不匹配(0xfc
是无效的UTF-8)您应该使用
new StringEntity(content, HTTP.UTF_8);
相反
StringEntity
的构造函数对提供的字符串和字符集调用getBytes()
(检查)。如果没有提供字符集,则使用默认字符集(而不是UTF-8)
随后调用setContentEncoding()
会更改HTTP头,但不会更改内容本身。因此不匹配(0xfc
是无效的UTF-8)这是一种深层次的细节。我不知道。感谢您的工作解答。HTTP.UTF_8现在显示为不推荐,您知道是什么取代了它吗?@NethHTTP.UTF_8
现在已不推荐,但StringEntity
以及完整的Apache HTTP客户端包也不推荐。:)这是一种深刻的细节。我不知道。感谢您的工作解答。HTTP.UTF_8现在显示为不推荐,您知道是什么取代了它吗?@NethHTTP.UTF_8
现在已不推荐,但StringEntity
以及完整的Apache HTTP客户端包也不推荐。:)这是一种深刻的细节。我不知道。感谢您的工作解答。HTTP.UTF_8现在显示为不推荐,您知道是什么取代了它吗?@NethHTTP.UTF_8
现在已不推荐,但StringEntity
以及完整的Apache HTTP客户端包也不推荐。:)这是一种深刻的细节。我不知道。感谢您的工作解答。HTTP.UTF_8现在显示为不推荐,您知道是什么取代了它吗?@NethHTTP.UTF_8
现在已不推荐,但StringEntity
以及完整的Apache HTTP客户端包也不推荐。:)