summary:http乱码

案例描述

使用包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编码的数据。

阅读更多
个人分类: java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭