想吃鸟的鱼 2024-03-19 10:06 采纳率: 50%
浏览 8

系统默认编码utf-8,接收gbk字符串乱码

系统默认是UTF-8的编码,最近需要接收外部短信平台的信息,但是短信平台编码是GBK的,通过HttpServletRequest接收json字符串,但是因为系统默认是UTF-8的编码,一接收直接就默认转成UTF-8了,直接就乱码了,因为字符数不一样,也就转不回去了,怎么可以在系统是utf-8的情况下使用gbk来接收HttpServletRequest中的字符串,我看网上说添加

img


但是添加了也没有作用,有没有以前处理过这种问题的

  • 写回答

2条回答 默认 最新

  • 码农阿豪 Java领域优质创作者 2024-03-19 10:12
    关注
    让阿豪来帮你解答,本回答参考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()方法来处理接收到的字符串信息,并返回结果。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月19日

悬赏问题

  • ¥15 android 蓝牙闪退
  • ¥15 绝缘子污秽comsol仿真参数
  • ¥15 Fatal error in Process MEMORY
  • ¥15 labelme生成的json有乱码?
  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码
  • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
  • ¥15 怎样才能让IDEA不爆红