系统默认是UTF-8的编码,最近需要接收外部短信平台的信息,但是短信平台编码是GBK的,通过HttpServletRequest接收json字符串,但是因为系统默认是UTF-8的编码,一接收直接就默认转成UTF-8了,直接就乱码了,因为字符数不一样,也就转不回去了,怎么可以在系统是utf-8的情况下使用gbk来接收HttpServletRequest中的字符串,我看网上说添加
但是添加了也没有作用,有没有以前处理过这种问题的
系统默认是UTF-8的编码,最近需要接收外部短信平台的信息,但是短信平台编码是GBK的,通过HttpServletRequest接收json字符串,但是因为系统默认是UTF-8的编码,一接收直接就默认转成UTF-8了,直接就乱码了,因为字符数不一样,也就转不回去了,怎么可以在系统是utf-8的情况下使用gbk来接收HttpServletRequest中的字符串,我看网上说添加
让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言问题描述: 系统默认使用UTF-8编码,需要接收GBK编码的短信平台信息,由于HttpServletRequest默认会将接收到的字符串转为UTF-8编码,导致乱码问题,如何在系统默认为UTF-8的情况下,正确接收并处理GBK编码的信息? 解决方案: 在接收HttpServletRequest中的字符串之前,先将请求的字符集转为GBK编码,再进行字符串解析。 代码示例:
@RequestMapping("/sms")
@ResponseBody
public String receiveSMS(HttpServletRequest request) throws Exception {
//获取请求参数,并设置字符集为GBK
String smsContent = IOUtils.toString(request.getInputStream(),"GBK");
//对接收到的GBK编码的字符串进行解析,并转为UTF-8编码的字符串再进行处理
String utf8Str = new String(smsContent.getBytes("GBK"), "UTF-8");
//处理接收到的字符串信息,并返回结果
String result = handleSMS(utf8Str);
return result;
}
在上面的代码示例中,我们通过设置IOUtils的字符集为GBK来获取请求中的字符串,避免了字符串乱码的问题。接着,我们将接收到的GBK编码的字符串通过getBytes()方法转为字节数组,再通过使用UTF-8字符集将字节数组转为UTF-8编码的字符串,从而保证了接收到的字符串信息的正确性和可读性。最后,我们调用handleSMS()方法来处理接收到的字符串信息,并返回结果。