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);
打了斷點后發現回傳值是亂碼,如下圖

亂碼如下:笀?猀甀挀挀攀猀猀??琀爀甀攀??洀攀猀猀愀最攀??????齒???攙愀琀愀??渀甀氀氀紀
有沒有遇到這種情況的,怎么解決
uj5u.com熱心網友回復:
發送的中文轉iso編碼uj5u.com熱心網友回復:
Spring RestTemplate中文亂碼解決方案由于RestTemplate的默認構造方法初始化的StringHttpMessageConverter的默認字符集是ISO-8859-1,所以導致RestTemplate請求的回應內容會出現中文亂碼。在這里我就要無力的吐槽一下了,Spring.StringHttpMessageConverter的默認字符集為啥是ISO-8859-1
uj5u.com熱心網友回復:
@Configurationpublic 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;
}
}
uj5u.com熱心網友回復:
自定義注入restTemplate 設定accept-charset就可以解決這個問題了uj5u.com熱心網友回復:
設定編碼格式,可以解決。uj5u.com熱心網友回復:
spring和容器都有提供,至于像你們說的這么麻煩嗎?uj5u.com熱心網友回復:
org.springframework.web.filter.CharacterEncodingFilter若你用spingboot默認好像都是開啟的
Apache Tomcat 8 Configuration Reference
org.eclipse.jetty.util.UrlEncoding.charset
uj5u.com熱心網友回復:
這個確實應該通過過濾器解決,其中有一項就是編碼過濾器轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/12765.html
標籤:Web 開發
