這兩天項目需要將報文以xml格式推送給核心,過程中使用到RestTemplate,并且在自己拼接xml時使用了StringBuffer;
一、StringBuffer的.toString()
StringBuffer的.toString()是不會生成UTF-8格式的String的。
new String(sb.toString().getByte("你當前的編碼方式"),"UTF-8");
這種方式我沒有測試過,因為我無法確定當前的編碼方式。
所以我選擇的是轉換為byte[] bytes
后
String str = new String(bytes, "UTF-8");
參考地址:http://blog.csdn.net/mengyan4632/article/details/6442548
二、RestTemplate
在發送的時候,使用了RestTemplate的postForObject(),
而RestTemplate會使用StringHttpMessageConverter,其默認編碼集是ISO8859-1;
此時我選擇設置Http請求頭:
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("application/x-www-form-urlencoded; charset=UTF-8");
headers.setContentType(type);
HttpEntity<String> requestEntity = new HttpEntity<String>(PostStrUtils.getPostStrFromMap(paramMap),headers);
String msg = restTemplate.postForObject(url, requestEntity, String.class);
還有方法是在xml配置文件中配置restTempalate的Bean的StringHttpMessageConverter編碼;
這里由于項目原因我沒法在xml配置文件中直接修改。
我使用的方法不是單例模式的,修改xml配置文件是單例模式的。
tips:另外String字符串中如果有雙引號,比如xml頭:
String str = new String("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
這里必須對每個雙引號使用轉義字符\