转载---HttpUrlConnection发送post请求汉字出现乱码的一个解决方法及其原因
原文:http://blog.csdn.net/qqaazz211/article/details/52136187
在网上看到了这篇比较简单的解决方法,果然有用,特记之
解决方法是:将 out.writeBytes(string); 改成 out.write(string.getBytes()); 就解决了。改了之后的部分代码如下:
   try {
            URL url = new URL(httpUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setRequestMethod("POST");
            connection.setUseCaches(false);
            connection.setRequestProperty("Content-type", "application/json;charset=UTF-8");
            connection.setConnectTimeout(30000);
            connection.setReadTimeout(30000);
            connection.connect();
            DataOutputStream out = new DataOutputStream(connection.getOutputStream());
            JSONObject obj = new JSONObject();
            Map map = new HashMap();
            map.put("name", "张三");
            map.put("gender", "男");
            obj.putAll(map);            String string = obj.toString();
            out.write(string.getBytes());
            //out.writeBytes(string);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
具体原因博文:writeBytes()存在的问题
原因:out.writeBytes(content);该语句在转中文时候,已经变成乱码
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)); //高8位丢失
            }
            incCount(len);
        }
因为Java里的char类型是16位的,一个char可以存储一个中文字符,在将其转换为 byte后高8位会丢失,这样就无法将中文字符完整的输出到输出流中。所以在可能有中文字符输出的地方最好先将其转换为字节数组,然后再通过write写入流,目前尝试过这种方法:把上面链接代码中的out.writeBytes(content);替换为out.write(content.getBytes());先把数据转成BYTE在写入流,执行成功,服务器接收正确的中文内容
转载---HttpUrlConnection发送post请求汉字出现乱码的一个解决方法及其原因的更多相关文章
- HttpUrlConnection发送url请求(后台springmvc)
		
1.HttpURLConnection发送url请求 public class JavaRequest { private static final String BASE_URL = "h ...
 - HttpURLConnection发送POST请求(可包含文件)
		
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io. ...
 - HttpURLConnection 发送http请求帮助类
		
java 利用HttpURLConnection 发送http请求 提供GET / POST /上传文件/下载文件 功能 import java.io.*; import java.net.*; im ...
 - Android系列之网络(三)----使用HttpClient发送HTTP请求(分别通过GET和POST方法发送数据)
		
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
 - 【转载】关于quartus ii软件中注释乱码问题的解决方法
		
最近在看Verilog代码,由于我的quartus版本打开他们的文件注释会全部乱码,痛苦万分!从网上找了下原因,解决方法基本没有,不过看到有人提出是编码的问题,立马我就想到一个解决方法,经过实验果然有 ...
 - 从js向Action传中文参数出现乱码问题的解决方法
		
Action获取jsp表单中的中文参数,只要整个项目都采用UTF-8编码格式都不会出现乱码问题:但JSP中用到JS,并从JS向Action传中文参数,就会出现中文乱的现象 做项目的时候,发现A ...
 - ajax跨域POST时执行OPTIONS请求服务端返回403forbidden的解决方法
		
ajax访问服务端restful api时,由于contentType类型的原因,浏览器会先发送OPTIONS请求. 本人服务端用的是spring mvc框架,web服务器用的是tomcat的,以下给 ...
 - jquery.ajax的url中传递中文乱码问题的解决方法
		
jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQu ...
 - windows下mysql中文乱码, 配置解决方法
		
内容源自:windows下mysql中文乱码, 配置解决方法 解决方法:打开mysql安装目录,打开my.ini文件(如果只有my-default.ini文件,先将其改名为my.ini!!!) 修改内 ...
 
随机推荐
- bzoj4321: queue2(DP)
			
woc万能的OEIS大法!这题居然是有递推式的QAQ http://oeis.org/A002464 这题的状态想不出来T^T... f[i][j][0/1]表示前i个编号,有j对相邻的编号位置上相邻 ...
 - 【树形DP】【P1351】 【NOIP2014D1T2】联合权值
			
传送门 Description 无向连通图 \(G\) 有 \(n\) 个点, \(n-1\) 条边.点从 \(1\) 到 \(n\) 依次编号,编号为 \(i\) 的点的权值为 \(W_i\) ,每 ...
 - 【DP】【P1586】四方定理
			
传送门 Description Input 第一行为一个整数T代表数据组数,之后T行每行一个数n代表要被分解的数 Output 对于每个n输出一行,为方案个数 Sample Input Sample ...
 - 在CentOS 6.5 中安装JDK 1.7 + Eclipse并配置opencv的java开发环境(二)
			
一.安装JDK 1.7 1. 卸载OpenJDK rpm -qa | grep java rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.50.1.11.5. ...
 - 洛谷P3935 Calculating (莫比乌斯反演)
			
P3935 Calculating 题目描述 若xx分解质因数结果为\(x=p_1^{k_1}p_2^{k_2}\cdots p_n^{k_n},令f(x)=(k_1+1)(k_2+1)\cdots ...
 - HDU1507二分图
			
Uncle Tom's Inherited Land* Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
 - MongoDB入门(5)- 我们自己封装的MongoDB-Java版本
			
用法 实体定义 package com.wisdombud.mongotool; import java.io.Serializable; import java.util.Date; import ...
 - html 让一行文字居中
			
文本在行高范围内垂直居中 可以利用行高特性让一行文本居中 line-height:100px://父容器的高度
 - UVA  1635 Irrelevant Elements
			
https://vjudge.net/problem/UVA-1635 题意:n个数,每相邻两个求和,最后变成1个数,问这个数除m的余数与第几个数无关 n个数使用次数分别为C(n-1,i) i∈[0, ...
 - 51Nod 1049最大子段和  | 模板
			
Input示例 6 -2 11 -4 13 -5 -2 Output示例 20 1.最大子段和模板 #include "bits/stdc++.h" using namespace ...