作者f(xi)bysss
msn:jameslastchina@hotmail.com
blog:blog.csdn.net/fbysss
声明Q本文由fbysss原创Q{载请注明出处
关键字:q
文g1Qencode.jsp
<%@ page language="java" contentType="text/html; charset=GBK"
pageEncoding="GBK"%>
<%
String sFileName = "中文文g?doc";
sFileName = java.net.URLEncoder.encode(sFileName);//代码?
%>
<a href="javascript:decode('<%=sFileName%>');">decode</a>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<body>
<script language="javascript">
function decode(filename){
location.href="decode.jsp?filename="+filename;//代码?
}
</script>
</body>
</html>
文g2Qdecode.jsp
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<%
String sFileName = request.getParameter("filename");
sFileName = java.net.URLDecoder.decode(sFileName,"GBK");//代码?
out.println("filename:"+sFileName);
%>
看上去,q样肯定可以辑ֈ要求了,但是事实不是q样Qjavascriptq不识别jsp~码后的字符Ԍ
用鼠标移动到链接上方Ӟ可以看到IE状态栏上的是正确的编码,?%D6%D0%CE%C4%CE%C4%BC%FE%C3%FB.doc"
然而要注意的是Q用鼠标右键点击链接-〉属性看到的URL是javascript:decode('ÖÐÎÄÎÄVÃ].doc');后果可想而知Q{向后输出的是q?br /> 弄了半天Q{UTF-8也是一P一个小问题整的很郁P最后想刎ͼq得在jsq里下手?br /> 把encode.jsp代码?注释掉,代码?前面加入一行:filename = encodeURI(filename);
看到一点进展:转向后的url已经很规范了Qfilename=%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6%E5%90%8D.docQ但是结果仍然是q。ؓ啥呢Q注意观察,前面的编码和后面是不一LQ?br />然而,javascript的EncodeURI没有提供~码参数,默然是UTF-8. 好,那么 sFileName = java.net.URLDecoder.decode(sFileName,"UTF-8");行不行呢Q答案是Q不行,原因我现在还没找刎ͼ扑ֈ了会在此补充Q如果哪位知道,q望指点?br />解决办法Q把代码?替换?br />sFileName= new String(sFileName.getBytes("ISO-8859-1"), "UTF-8");
现在再看l果Q已l是正常的中文了?/font>
补充QAjax中,servlet输出中文之后Q需要jsdQ同样面临编码问题,可以采取如下方式Q?br />在servlet中用URLEncoder~码sText = URLEncoder.encode(sText,"UTF-8");
在js中用decodeURI解码xText = decodeURI(xText);