欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解决: HttpPost 中文字符乱码

程序员文章站 2024-01-27 00:01:58
...

网上有

有两种post方式:

第一:原生的post方式 

例如:

        HttpURLConnection connection = null;
        try {

            // 创建连接
            URL url = new URL(URL);
            connection = (HttpURLConnection) url.openConnection();

            // 设置http连接属性
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setRequestMethod("POST"); // 可以根据需要 提交 GET、POST、DELETE、INPUT等http提供的功能
            connection.setUseCaches(false);
            connection.setInstanceFollowRedirects(true);

            // 设置http头 消息
            connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");  //设定 请求格式 json,也可以设定xml格式的
            // connection.setRequestProperty("Content-Type", "text/xml");   //设定 请求格式 xml,
            connection.setRequestProperty("Accept", "application/json");//设定响应的信息的格式为 json,也可以设定xml格式的

            // connection.setRequestProperty("X-Auth-Token","xx");  //特定http服务器需要的信息,根据服务器所需要求添加
            connection.connect();

            // 传递 fastjson数据
            OutputStream out = connection.getOutputStream();    // 获取(写)数据流
            out.write(jsonObject.toJSONString().getBytes());    // 向数据流写数据 (JsonObject需要先转换成字符串)
            out.flush();
            out.close();                                        // 关闭数据流

            // 请求返回的状态 connection.getResponseCode()
            if (connection.getResponseCode() != 200) {
                throw new IOException("Can not connect URL");
            }
.....省略


connection.setRequestProperty("Content-Type", "application/json");

改成

connection.setRequestProperty("Content-Type", "application/json; charset=UTF-8");

第二种:HttpPost

我写成下面这样:无效
            StringEntity params = new StringEntity(jsonObject.toJSONString());
            params.setContentEncoding("UTF-8");
            post.addHeader("content-type", "application/json; charset=UTF-8");
            post.addHeader("Accept", "application/json");
            post.addHeader("Accept-Encoding", "UTF-8");
            post.setEntity(params);

改成:

HttpPost post = new HttpPost(URL);
// UTF-8 解决中文乱码
StringEntity params = new StringEntity(jsonObject.toJSONString(), "UTF-8");
post.addHeader("content-type", "application/json; charset=UTF-8");
post.addHeader("Accept", "application/json");
post.addHeader("Accept-Encoding", "UTF-8");
post.setEntity(params);


如果接受方法中,还是无法显示中文,可以加上

new String(param.getBytes(), Charset.forName("UTF-8"));