这两天项目需要将报文以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\"?>");
这里必须对每个双引号使用转义字符\