summary:http乱码

本文介绍了解决HTTP POST请求中出现乱码的方法。当发送端和接收端使用UTF-8编码时,若未正确设置编码,则会出现乱码。文章提供了两种解决方案:一是在发送端设置正确的编码;二是接收端转换编码。

案例描述

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值