Java使用HttpURLConnection发起带中文HTTP请求乱码

under 默认分类  tag     Published on November 18th , 2021 at 10:57 pm

前言

使用Bark实现iOS消息推送时,遇到中文乱码问题,如下所示:
请输入图片描述

解决方法:

把URL中的中文部分(不包括英文与'/')使用URLEncoder.encode进行编码成utf-8格式:

URLEncoder.encode("中文", "utf-8");

完整代码

1. URL拼接

注意只能把中文部分进行encode

// 中文Hint
String hint = student.getS_name() + "同学,你已晚归!";    
// 进行编码
hint = URLEncoder.encode(hint , "utf-8");
// URL
String urlTmp = "http://api.day.app/"+  barkId + "/" ;  
// 拼接
String url = urlTmp + hint;

2、在Http Utils里

public static String doGet(String httpurl) {
        HttpURLConnection connection = null;
        InputStream is = null;
        BufferedReader br = null;
        String result = null;// 返回结果字符串
        try {
            // 创建远程url连接对象
            URL url = new URL(httpurl);
            // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
            connection = (HttpURLConnection) url.openConnection();
            // 设置连接方式:get
            connection.setRequestMethod("GET");
            connection.setRequestProperty("Content-type", "text/html");
            connection.setRequestProperty("Accept-Charset", "utf-8");
            connection.setRequestProperty("contentType", "utf-8");
            // 设置连接主机服务器的超时时间:15000毫秒
            connection.setConnectTimeout(15000);
            // 设置读取远程返回的数据时间:60000毫秒
            connection.setReadTimeout(60000);
            // 发送请求
            connection.connect();
        }
}

本文由simyng创作, 采用知识共享署名4.0 国际许可协议进行许可,转载前请务必署名
  文章最后更新时间为:November 18th , 2021 at 03:06 pm