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下就不会有乱码了.
以上是 JAVA servlet输出IE6下乱码 的全部内容, 来源链接: utcz.com/z/392435.html