java中http请求,记得加字符集 UTF-8,StringEntity
短信预约 -IT技能 免费直播动态提醒
http请求经常会遇到一些奇怪的问题,例如发送请求失败,或者response出现问题,或者参数中带了url调接口失败,调用微信接口失败,调用nginx转发失败,等等。
但用postman调用不会有问题。
这说明参数本身没有问题,服务器也没有问题,是客户端的问题。在你的代码里面,客户端就是你调用的那些发http的包。例如httpclient。
通常都是body没有设置字符集。
例如
HttpPost httpPost = new HttpPost(url);StringEntity body = new StringEntity(jsonStr, "UTF-8");httpPost.setEntity(body);
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList,"UTF-8");httpPost.setEntity(entity);
简单说就是要给特殊字符编码。body中的那些特殊字符需要编码。有时是用
URLEncoder.encode(bodyStr, "UTF-8");
例如StringEntity的源码:他将传进来的body内容转成byte数组。所以就无需URLEncoder。
但这里charset默认是ISO8859-1,所以需要指定UTF-8。
public class StringEntity extends AbstractHttpEntity implements Cloneable { protected final byte[] content; public StringEntity(String string, ContentType contentType){ Charset charset = contentType != null ? contentType.getCharset() : null; this.content = string.getBytes(charset); }}
来源地址:https://blog.csdn.net/u011149152/article/details/131714272
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341