Servlet中文乱码处理小结

    最近在学习servlet过程中频繁遇到中文乱码问题,而且每次都要花费不少时间才能解决,为了下次遇到同样的问题时能节省时间,特地在此做个总结。
    Servlet中的乱码问题分为以下几类:
    一.表单(form)提交形式:
    ①post提交方式:在服务器端设置成浏览器端的编码方式
        request.setCharacterEncoding("utf-8");
    ②get提交方式:写一个自己的工具类MyTools,代码如下:
public class MyTools {
    public static String getNewString(String str){
        String newString="";
        try {
            //把iso-8859-1转换为utf-8
            newString=new String(str.getBytes("iso-8859-1"),"utf-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            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的中文乱码问题,有时也要视具体情况来分析,不能一概而论。

                                             ——新手菜鸟
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值