问题如下(图片盗的,懒得自己截图):
我给这鬼东西烦了一天!
之前学校要求我们做一个简单的数据库增删查改的小网页,我写完代码之后啥问题都没有,包括删除其名字(主键)是中文的数据。
这几天老师要求我们把那个网页改成DAO模式(之前是全jsp页面),我就开始改,写到最后发现删除其名字(主键)为中文的数据删除不了,会报出如上图的错误。找了半天都不知道啥问题,于是我就运行回之前那份代码(全jsp那份),也不行了!!之前都是可以的。百度说什么tomcat版本问题啊之类的,可是我tomcat的版本一直都是9.0啊!为毛之前行如今不行。于是我就觉得是js问题,可是js也没改过啊!
最终我放弃了寻找问题!
而是参考https://blog.csdn.net/yhq1913/article/details/53406275
解决如下:
不符合的符号都先在客户端进行URLEncode编码,再将URL拼接成一个整体后再发送出去。最后服务端在进行解码。
只不过我页面本来的编码就是utf-8
按照上图的代码写依然是会乱码(但是能传送过去了)
其实我也不太懂原理
所以我的代码是
out.print("<form action=\"../servlet/servlet?method=delete&name="+java.net.URLEncoder.encode(user.getUsername(),"utf-8")+"\" method=\"post\">");
out.print("<input type=\"submit\" value=\"删除\">");
String username = new String(request.getParameter("name").getByte("utf-8"),"utf-8");
username = java.net.URLDecoder.decode(username,"utf-8");
反正很神奇
啊 今天在书本发现了这东西原来叫做 使用String类的构造方法对字符串进行重构
但我还是不懂为啥要将utf-8重构成utf-8