Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android应用程序和spring rest服务之间的httpost字符编码问题_Java_Android_Character Encoding_Http Post_Apache Commons Httpclient - Fatal编程技术网

Java android应用程序和spring rest服务之间的httpost字符编码问题

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{

我正试图让我的android应用程序与我的SpringRESTWeb服务对话。我正在android上制作
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现在显示为不推荐,您知道是什么取代了它吗?@Neth
HTTP.UTF_8
现在已不推荐,但
StringEntity
以及完整的Apache HTTP客户端包也不推荐。:)这是一种深刻的细节。我不知道。感谢您的工作解答。HTTP.UTF_8现在显示为不推荐,您知道是什么取代了它吗?@Neth
HTTP.UTF_8
现在已不推荐,但
StringEntity
以及完整的Apache HTTP客户端包也不推荐。:)这是一种深刻的细节。我不知道。感谢您的工作解答。HTTP.UTF_8现在显示为不推荐,您知道是什么取代了它吗?@Neth
HTTP.UTF_8
现在已不推荐,但
StringEntity
以及完整的Apache HTTP客户端包也不推荐。:)这是一种深刻的细节。我不知道。感谢您的工作解答。HTTP.UTF_8现在显示为不推荐,您知道是什么取代了它吗?@Neth
HTTP.UTF_8
现在已不推荐,但
StringEntity
以及完整的Apache HTTP客户端包也不推荐。:)