• JAVA servlet输出IE6下乱码


    这几天又被IE6坑了,发现一个有趣的bug。
    乱码图片截图:

    比如用一个servlet做一个文件导出功能,导出的时候从页面上读取文件名。例如文件名 "ABC导出.xml",如果文件名中的中文字符时偶数,导出的时候就不会有乱码。如果文件名不是偶数时就会有乱码。
    后来到网上查了一下还真有这么回事。

     
    如题,如果servlet容器使用的是Tomcat,那么一般会在server.xml中配置URIEncoding来处理get传参的编码问题。由于我们项目中用了ckfinder,如果不配置URIEncoding的话,上传中文名字的图片时会显示不出来,因为会将图片路径中的中文转成unicode的形式而此时不能正确的对get解码。配置了URIEncoding以后,IE系列中7、8、9都没有问题,只有IE6时,貌似IE6对utf8的支持不完全,所以就算是自己在servlet或action中自行转码,也有问题,就是偶数个汉字可以,奇数个汉字,最后一个是乱码,就算一个字也如此。这时,就想到了不如在jsp中将参数先转成utf8编码格式的,再当参数放入,果然,测试通过。
    Java代码  
    <%  
    String param = "";  
    if(request.getAttribute("selectParam")!=null)  
    {  
        param = request.getAttribute("selectParam").toString();  
        param = java.net.URLEncoder.encode(param,"UTF-8");  
        pageContext.setAttribute("selectParam",param);  
    }  
    %>  
     由于我的分页参数使用了selectParam,所以在此之前我先将该属性从request中取到,编码后再放入page作用域,
    这样下面使用EL表达式取值的时候就是我编码以后的值了。

    红色字体来源于网络

    但是上面内容说是用jsp,但是我的工程中前台只用到了js,html。没有jsp,这该如果转换呢?
    研究后发现可以这样:
    可以把中文字符转换一下,例如: 
    前台js代码参考如下 
    function exportXml(mibId,name) { 
    var url = "http://www.cnblogs.com/servlet/BmpExportMibXmlServlet?flag=1"; 
    var mibName = name+".xml"; 
    url = url+"&mibId="+mibId+"&mibName="+encodeURI(mibName); 
    window.open(url, ""); 


    其中encodeURI(mibName)就是要转换的内容。 

    这样再到后台编写如下代码: 
      String mibName = new String(req.getParameter("mibName").getBytes("ISO-8859-1"), "UTF-8"); 
      resp.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(mibName, "UTF-8")); 

    以下这两句很重要 
    String mibName = new String(req.getParameter("mibName").getBytes("ISO-8859-1"), "UTF-8"); 
    URLEncoder.encode(mibName, "UTF-8") 
    这样servlet输出名字时在IE6下就不会有乱码了. 

  • 相关阅读:
    matplotlib.pyplot.gca().set_xlim(初始值,末值) 与 matplotlib.pyplot.xticks()的区别
    MySql学习-5.查询2
    MySql学习-4.查询1
    SQL函数学习(一):substring()函数
    SQL函数学习(二):DATEADD() 函数
    SQL函数学习(三):convert()函数
    sql标识符和格式
    PIVOT就是行转列,UNPIVOT就是列传行
    行列转换之静态、动态、PIVOT方法
    sql Server函数大全
  • 原文地址:https://www.cnblogs.com/liwei45212/p/3028535.html
Copyright © 2020-2023  润新知