最近在学习servlet过程中频繁遇到中文乱码问题,而且每次都要花费不少时间才能解决,为了下次遇到同样的问题时能节省时间,特地在此做个总结。
Servlet中的乱码问题分为以下几类:
一.表单(form)提交形式:
①post提交方式:在服务器端设置成浏览器端的编码方式
request.setCharacterEncoding("utf-8");
②get提交方式:写一个自己的工具类MyTools,代码如下:
public class MyTools {
public static String getNewString(String str){
String newString="";
try {
newString=new String(str.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return newString;
}
}
这里假设u代表要输出的数据,如果直接输出:
out.println("u="+u);
此时u可能是乱码显示在浏览器端,这时就可以调用我们刚刚写的工具类:
out.println("u="+MyTools.getNewString(u));
这样在浏览器就会以中文显示,而不是乱码了。
二.超链接形式:
<a href="/encoding/GetInfoServlet?username=你好吗">测试</a>
超链接形式实际上可以转换为get提交方式的情况来处理
三.使用sendRedirect()将中文数据从一个servlet带到另一个servlet时出现的乱码
如:`response.sendRedirect("/encoding/Wel?YY="+u);`
如果这里的u是中文数据,则传入下一个servlet就会出现乱码,此时的解决方法为:
response.sendRedirect("/encoding/Wel?YY="+java.net.URLEncoder.encode(u, "utf-8"))
其中的java.net.URLEncoder.encode(u, "utf-8")表示把u编码为utf-8的形式,因为多数浏览器的uri默认的显示方式为utf-8,这样数据传入下一个页面就是中文了。
四.下载文件时,提示框中文件名显示为乱码
解决方法:
String temp=java.net.URLEncoder.encode("传奇.mp3", "utf-8")
五.用request.getQueryString()方法来获取get提交方式中的带有中文的数据,输出是会显示:%SD%ABC%FHG%GVB%这样的内容,这时要在它输出之前进行解码:
queryString = java.net.URLDecoder.decode(queryString, "utf-8")
当然,以上只是个人的一点总结,若有问题,还望各位指出,我们一起学习,共同进步。关于servlet的中文乱码问题,有时也要视具体情况来分析,不能一概而论。
——新手菜鸟