SpringBoot RestTemplate请求返回乱码怎么解决

次世代数据技术 2020-06-19 10:18:19
String paras = "XXXXXX";

WechatPushMessage wechatPushMessage = new WechatPushMessage();
wechatPushMessage.setToInUser("85027490");
wechatPushMessage.setContent("测试发送消息");

RestTemplate restTemplate = new RestTemplate();
// restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(Charset.forName("GBK")));


String url = "http://XXXXX";
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
headers.setContentType(type);
headers.add("Accept", MediaType.APPLICATION_JSON.toString());
JSONObject jsonObj = JSONObject.parseObject(paras);

HttpEntity<String> formEntity = new HttpEntity<String>(jsonObj.toString(), headers);
String result = restTemplate.postForObject(url, formEntity, String.class);


打了断点后发现返回值是乱码,如下图


乱码如下:笀∀猀甀挀挀攀猀猀∀㨀琀爀甀攀Ⰰ∀洀攀猀猀愀最攀∀㨀∀ꡣƐၢ齒∀Ⰰ∀搀愀琀愀∀㨀渀甀氀氀紀

有没有遇到这种情况的,怎么解决
...全文
1689 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
萌新村村长 2021-08-24
  • 打赏
  • 举报
回复 1

看楼上一个赞都没有 就说明 都没有解决String body = new String(result.getBytes(Charset.forName("utf-16"))); 这个就能拿到数据了

GlamoroGG 2020-11-11
  • 打赏
  • 举报
回复
解决了吗 老哥 我新建一个工程就乱码,在老项目中就不乱码 真的玄学
小猿xz 2020-09-23
  • 打赏
  • 举报
回复
请问解决了码?
飞翔吧旅途 2020-09-21
  • 打赏
  • 举报
回复
[quote=引用 5 楼 神秘小峯 的回复:]在哪设置编码格式,可以解决?????
KeepSayingNo 2020-09-04
  • 打赏
  • 举报
回复
这个确实应该通过过滤器解决,其中有一项就是编码过滤器
街头小贩 2020-09-03
  • 打赏
  • 举报
回复
org.springframework.web.filter.CharacterEncodingFilter
若你用spingboot默认好像都是开启的 Apache Tomcat 8 Configuration Reference org.eclipse.jetty.util.UrlEncoding.charset
街头小贩 2020-09-03
  • 打赏
  • 举报
回复
spring和容器都有提供,至于像你们说的这么麻烦吗?
王大师王文峰 2020-09-03
  • 打赏
  • 举报
回复
设置编码格式,可以解决。
liuxingqiling 2020-08-25
  • 打赏
  • 举报
回复
自定义注入restTemplate 设置accept-charset就可以解决这个问题了
liuxingqiling 2020-08-25
  • 打赏
  • 举报
回复
@Configuration public class RestTemplateConfig { @Bean public RestTemplate restTemplatMessageSdk() { HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(); httpRequestFactory.setConnectionRequestTimeout(1800000); httpRequestFactory.setConnectTimeout(1800000); httpRequestFactory.setReadTimeout(1800000); RestTemplate restTemplate = new RestTemplate(httpRequestFactory); StringHttpMessageConverter t = new StringHttpMessageConverter(); //设置为false就可以修改header中的accept-charset属性 t.setWriteAcceptCharset(false); t.setDefaultCharset(StandardCharsets.UTF_8); restTemplate.getMessageConverters().add(0,t); return restTemplate; } }
liuxingqiling 2020-08-25
  • 打赏
  • 举报
回复
Spring RestTemplate中文乱码解决方案   由于RestTemplate的默认构造方法初始化的StringHttpMessageConverter的默认字符集是ISO-8859-1,所以导致RestTemplate请求的响应内容会出现中文乱码。在这里我就要无力的吐槽一下了,Spring.StringHttpMessageConverter的默认字符集为啥是ISO-8859-1
Forevermark993 2020-06-19
  • 打赏
  • 举报
回复
发送的中文转iso编码

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧