HttpURLConnection发送中文乱码问题解决

简介: HttpURLConnection发送中文乱码问题解决

/**

 * 发送http POST请求
 *
 * @param
 * @return 远程响应结果
 */
public static String sendPost(String u, String json) throws Exception {
    StringBuffer sbf = new StringBuffer();
    try {
        URL url = new URL(u);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.setUseCaches(false);
        connection.setInstanceFollowRedirects(true);
        connection.addRequestProperty("Content-Type", "application/json");
        connection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        connection.connect();
        DataOutputStream out = new DataOutputStream(connection.getOutputStream());
        if (!"".equals(json)) {
            //out.writeBytes(json);
            out.write(json.getBytes());
        }
        out.flush();
        out.close();

        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String lines;
        while ((lines = reader.readLine()) != null) {
            lines = new String(lines.getBytes(), "utf-8");
            sbf.append(lines);
        }
        System.out.println(sbf);
        reader.close();
        // 断开连接
        connection.disconnect();
    } catch (IOException e) {
        e.printStackTrace();
        throw e;
    }
    return sbf.toString();
}

重点在于:替换out.writeBytes(json);为 out.write(json.getBytes());

原因为:out.writeBytes(json);该语句在转中文时候,已经变成乱码

public final void writeBytes(String s) throws IOException {
int len = s.length();
for (int i = 0 ; i < len ; i++) {
out.write((byte)s.charAt(i));
}
incCount(len);
}

因为java里的char类型是16位的,一个char可以存储一个中文字符,在将其转换为 byte后高8位会丢失,这样就无法将中文字符完整的输出到输出流中。所以在可能有中文字符输出的地方最好先将其转换为字节数组,然后再通过write写入流,

相关文章
|
7月前
|
应用服务中间件
tomcat服务器get、post请求及响应中文乱码问题
tomcat服务器get、post请求及响应中文乱码问题
|
7月前
|
前端开发 Java API
Android端通过HttpURLConnection上传文件到服务器
Android端通过HttpURLConnection上传文件到服务器
104 0
|
Java
Java:HttpURLConnection发送GET和POST请求
Java:HttpURLConnection发送GET和POST请求
265 0
|
JavaScript 开发者
通过服务器端设置响应报文头来解决乱码问题|学习笔记
快速学习通过服务器端设置响应报文头来解决乱码问题
|
Web App开发 Java
Javaweb 响应字节流输出中文乱码问题
Javaweb 响应字节流输出中文乱码问题
375 0
Javaweb 响应字节流输出中文乱码问题
使用HttpURLConnection发送GE,POST请求
使用HttpURLConnection发送GE,POST请求和上传文件
135 0
让URLConnection使用代理服务器
JDK的文档对使用代理服务器的介绍很少,据说JDK5.0好象增加了这方面的内容。其实要使用代理服务器很简单,只要在URL.openConnection()之前增加下面的代码即可: Properties prop = System.getProperties(); prop.put("http.proxyHost", getProxyHost()); prop.put("http.proxyPort", "" + getProxyPort()); 也就是给系统变量里增加了两个项,在执行程序时加上参数“-Dhttp.proxyHost=xxx”的效果也是一样的。
1134 0

热门文章

最新文章