关于HttpEntity 的乱码问题

frank江江 2014-08-25 11:57:34
有问题请教:
我将一个file中的json字符串取出,实例化一个StringEntiry,将json字符串写入请求体中。然后无论我以哪种编码方式输出StringEntity中的content,其中的中文均为乱码“???”。 这是怎么回事?

附上测试代码:

HttpClient client = HttpClients.createDefault();
HttpPost post = new HttpPost("some url");
post.addHeader("Content-Type", "application/json; charset=utf-8");
String requestContent = produceRequestContent();//这个方法返回的是上述json字符串。
StringEntity stringEntity = null;
try {
stringEntity = new StringEntity(requestContent);
stringEntity.setContentEncoding("utf-8");
post.setEntity(stringEntity);
InputStream input = stringEntity.getContent();
byte[] buffer = new byte[input.available()];
input.read(buffer);
String testStr = new String(buffer);
System.out.println(requestContent);
System.out.println(testStr);
System.out.println(EntityUtils.toString(stringEntity,"iso-8859-1"));
System.out.println(EntityUtils.toString(stringEntity,"gb2312"));
System.out.println(EntityUtils.toString(stringEntity,"gbk"));
System.out.println(EntityUtils.toString(stringEntity,"utf-8"));
} catch (Exception e) {
e.printStackTrace();
}

// 后面的execute省略了...

...全文
6944 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzd_xian 2017-04-01
  • 打赏
  • 举报
回复
感谢楼主,放在实例声明里面可以: StringEntity reqEntity = new StringEntity(params,"utf-8");
chkmouse 2015-09-01
  • 打赏
  • 举报
回复
我也遇到这个问题了 StringEntity he = new StringEntity(body,"utf-8"); he是乱码的,
_Oliver_ 2015-01-09
  • 打赏
  • 举报
回复
你好,后来咋解决的
frank江江 2014-08-25
  • 打赏
  • 举报
回复
引用 1 楼 u012345283 的回复:
你这个字符串是怎么拿到的? 拿到的时候不需要解码? 你是不是中间已经用别的编码解过一次码了?
字符串是读文件拿到的,恩需要解码,默认编码方式应该是UTF-8吧。
frank江江 2014-08-25
  • 打赏
  • 举报
回复
额.... stringEntity.setContentEncoding("utf-8"); 我这不设置了编码方式了么,但后面的输出仍然乱码。 但是~ new String(requestContent,"utf-8");后。全部ok了.....
百里马 2014-08-25
  • 打赏
  • 举报
回复
你这个字符串是怎么拿到的? 拿到的时候不需要解码? 你是不是中间已经用别的编码解过一次码了?
frank江江 2014-08-25
  • 打赏
  • 举报
回复
引用 5 楼 u012345283 的回复:
[quote=引用 3 楼 guodage003 的回复:] [quote=引用 1 楼 u012345283 的回复:] 你这个字符串是怎么拿到的? 拿到的时候不需要解码? 你是不是中间已经用别的编码解过一次码了?
字符串是读文件拿到的,恩需要解码,默认编码方式应该是UTF-8吧。[/quote] 默认解码当然是用你系统默认的编码了,一般中文系统是GBK[/quote] 恩 我项目中默认都是UTF-8编码。
百里马 2014-08-25
  • 打赏
  • 举报
回复
引用 3 楼 guodage003 的回复:
[quote=引用 1 楼 u012345283 的回复:] 你这个字符串是怎么拿到的? 拿到的时候不需要解码? 你是不是中间已经用别的编码解过一次码了?
字符串是读文件拿到的,恩需要解码,默认编码方式应该是UTF-8吧。[/quote] 默认解码当然是用你系统默认的编码了,一般中文系统是GBK
wyx100 2014-08-25
  • 打赏
  • 举报
回复
引用 1 楼 u012345283 的回复:
你这个字符串是怎么拿到的? 拿到的时候不需要解码? 你是不是中间已经用别的编码解过一次码了?

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧