summary:http乱码

来源:互联网 发布:零基础学qt4编程 编辑:程序博客网 时间:2024/04/29 21:13

案例描述

使用包org.apache.http.*,http post请求接收端使用UTF-8编码,接收时没有对编码做任何处理,结果乱码,情况要求发送端(也就是我们的业务系统)做调整,解决乱码问题。

解决方案

CloseableHttpClient httpclient = HttpClients.createDefault();      HttpPost httpPost = new HttpPost(host);httpPost.setEntity(new UrlEncodedFormEntity(List<NameValuePair>,"UTF-8")); 

延伸解读

new UrlEncodedFormEntity(nvps,”UTF-8”) 源码:

public UrlEncodedFormEntity (    final List <? extends NameValuePair> parameters,    final String charset) throws UnsupportedEncodingException {    super(        URLEncodedUtils.format(            parameters,charset != null ?             charset : HTTP.DEF_CONTENT_CHARSET.name()        ),        ContentType.create(URLEncodedUtils.CONTENT_TYPE, charset)    );}
public static final Charset DEF_CONTENT_CHARSET = Consts.ISO_8859_1;

可以看到,post请求如果不设置编码的情况下默认编码是 ISO_8859_1

小结

在默认情况下(假设发送端和接收端系统都使用UTF-8编码),是会有乱码问题的,此时解决方案有两种:

  • 发送端通过httpPost.setEntity(new UrlEncodedFormEntity(nvps,"UTF-8"))设置UTF-8编码

  • 接收端接收ISO_8859_1编码的数据,然后将它转换成UTF-8编码的数据。

1 0
原创粉丝点击