前端数据传到后端出现乱码问题

已经设置过响应时的编码

response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

但是依然出现乱码问题,解决方案如下:

将前端数据使用encodeURL进行编码,重点:需要进行两次encodeURL 编码

let username = encodeURI(encodeURI(document.getElementById("username").value));

后端解码(调用java.net.URLDecoder.decode()方法进行解码)

        String username = request.getParameter("username");
        String decode = "";
        try {
            decode = java.net.URLDecoder.decode(username, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        boolean flag = goodsService.checkUsername(decode);
        try {
            response.getWriter().println(flag);
        } catch (IOException e) {
            e.printStackTrace();
        }

完美解决!

前端在进行encode编码时,为什么用了两次encodeURI,而服务器后端在解码时只解了一次?

原因是:容器会默认帮你解一次码。(容器这里指服务器)

既然容器会默认解一次码,那么为什么不直接在前端只进行一次encode,服务端程序直接request.getParameter(“username”) ?

原因是:容器默认解码时采用的编码是容器的默认编码,可能是UTF-8,GBK,也可能是其他编码方式。这与你的应用的编码方式未必会一致。所以你直接获取的话可能会出现乱码。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐