HttpClient 中文乱码踩坑记录

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 11:16   15   0

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramsEntity,"UTF-8");
这样设置生效

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramsEntity);
entity.setContentEncoding("utf-8");
这样不生效

原理详解:https://blog.csdn.net/sdxushuxun/article/details/79282112

以下为转载记录:

  public StringEntity(final String string, final ContentType contentType) throws UnsupportedCharsetException {
   
  super();
  Args.notNull(string, "Source string");
  Charset charset = contentType != null ? contentType.getCharset() : null;
  if (charset == null) {
      charset = HTTP.DEF_CONTENT_CHARSET;
  }
  try {
      this.content = string.getBytes(charset.name());
  } catch (final UnsupportedEncodingException ex) {
      // should never happen
      throw new UnsupportedCharsetException(charset.name());
  }
  if (contentType != null) {
      setContentType(contentType.toString());
  }
  
 }

在new StringEntity的时候,就已经将数据根据编码进行了处理,也就是说,如果你调用 new StringEntity(String string)此构造方法,就会使用其默认的编码进行转码(ISO-8859-1),无论你后面设置多少次

entity.setContentEncoding("UTF-8");
或者
httpPost.addHeader("Content-Type","application/json;charset=UTF-8");


都不会改变字符串已经被按转码变成Byte[]数组的事实,当然在请求中设定传输编码格式还是要做的。

其实说这么多 ,解决问题的关键就一句话,在new StringEntity()的时候指定编码就解决了,因为在new的同时已经做了字符串的转码操作
————————————————
版权声明:本文为CSDN博主「li_yan_fei」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/li_yan_fei/article/details/68064275

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP