已经设置过响应时的编码
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,也可能是其他编码方式。这与你的应用的编码方式未必会一致。所以你直接获取的话可能会出现乱码。



