首先说,你修改那两个文件的编码,没有任何作用。
j2ee项目中出现乱码的原因是:
浏览器对你输入的中文参数进行了编码。
然后web服务器对你的参数进行了解码。
如果浏览器的编码,和web服务的解码,应用了相同编码的话,就不会用乱码。否则一定乱码。
解决方案:
因为,浏览器的编码未知,服务器的编码未知,所以只能尝试。
String name = request.getParameter("name");//获取浏览器提交的name参数
name = new String(name.getBytes("encode1"), "encode2");
encode1:指的是web服务器的编码,encode2:指浏览器所在操作系统的编码。
1、项目统一采用utf-8编码
2、用javascript对页面中得参数进行编码。(因为不同浏览器编码可能不同)
encodeURI();
3、服务器端,用相同的编码方法进行解码。推荐过滤器,request.setCharacterEncoding("UTF-8");
4、尽量使用post提交。
首先,servlet里面要设置的是两个代码
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
然后jsp页面的第一行最后也要是utf-8.
再有就是你的提交方式问题,如果是用post提交的话上述软编码足矣,但是你是doGet也就是用get方式提交.get方式提交是不支持中文的,因此不仅要软编码,还需要硬编码转换.
构造一个方法
public String toString(String old){
return new String(old.getBytes("ISO-8859-1"),"utf-8");
}
也就是把字符串打乱成字节再重组.这样软硬兼施就可以把get方式传值乱码问题解决了.
还有一点就是,凡是提交都推荐用post方法.
String name = request.getParameter("name");//获取浏览器提交的name参数
name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
url 传递参数是经过ISO-8859-1编码的
要post方式提交才行,其他设置都是对的