前端中文数据请求到后端出现乱码问题
前端数据传到后端出现乱码问题已经设置过响应时的编码response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");但是依然出现乱码问题,解决方案如下:将前端数据使用encodeURL进行编码,重点:需要进行两次encodeURL 编码let username = encodeURI(
·
前端数据传到后端出现乱码问题
已经设置过响应时的编码
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,也可能是其他编码方式。这与你的应用的编码方式未必会一致。所以你直接获取的话可能会出现乱码。
更多推荐
已为社区贡献1条内容
所有评论(0)