Url传递中文出现乱码解决纪实

原创 2006年06月20日 19:47:00

作者fbysss
msn:jameslastchina@hotmail.com 
blog:blog.csdn.net/fbysss
声明:本文由fbysss原创,转载请注明出处
关键字:乱码

文件1:encode.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<%
    String sFileName = "中文文件名.doc";
   sFileName = java.net.URLEncoder.encode(sFileName);//代码行1
%>
 <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;//代码行2
}

</script>
</body>
</html>

文件2:decode.jsp

<%@ page language="java" contentType="text/html; charset=gbk"
    pageEncoding="gbk"%>
<%
    String sFileName = request.getParameter("filename");
 sFileName = java.net.URLDecoder.decode(sFileName,"GBK");//代码行3
     out.println("filename:"+sFileName);
%>

        看上去,这样肯定可以达到要求了,但是事实不是这样,javascript并不识别jsp编码后的字符串:
用鼠标移动到链接上方时,可以看到IE状态栏上的确是正确的编码,即"%D6%D0%CE%C4%CE%C4%BC%FE%C3%FB.doc"
然而要注意的是:用鼠标右键点击链接-〉属性看到的URL是javascript:decode('ÖÐÎÄÎļþÃû.doc');后果可想而知,转向后输出的是乱码。
       弄了半天,转UTF-8也是一样,一个小问题整的很郁闷,最后想到,还得在js这里下手。
       把encode.jsp代码行1注释掉,代码行2前面加入一行:filename = encodeURI(filename);
看到一点进展:转向后的url已经很规范了:filename=%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6%E5%90%8D.doc,但是结果仍然是乱码。为啥呢?注意观察,前面的编码和后面是不一样的!
然而,javascript的EncodeURI没有提供编码参数,默然就是UTF-8.  好,那么 sFileName = java.net.URLDecoder.decode(sFileName,"UTF-8");行不行呢?答案是:不行,原因我现在还没找到,找到了会在此补充,如果哪位知道,还望指点。
解决办法:把代码行3替换成
sFileName= new String(sFileName.getBytes("ISO-8859-1"), "UTF-8");
现在再看结果,已经是正常的中文了。

补充:Ajax中,servlet输出中文之后,需要js读取,同样面临编码问题,可以采取如下方式:
在servlet中用URLEncoder编码sText = URLEncoder.encode(sText,"UTF-8");
在js中用decodeURI解码xText = decodeURI(xText);


 


 

 

版权声明:本文为博主fbysss原创文章,转载请注明出处

解决get方法传递URL参数中文乱码问题

应用一:解决tomcat下中文乱码问题(先来个简单的)  在tomcat下,我们通常这样来解决中文乱码问题: 过滤器代码: package filter;      import java....

Java web的URL地址参数传递中文乱码的解决方案

系统很多Url地址都暴露给用户,存在安全隐患,用户可以去随意修改Url地址和参数值,为了解决这个问题提供以下解决方案,具体步骤如下: 第一步:编码URL地址,调用CommonMethod.js的re...

javascript通过url向jsp页面传递中文参数乱码解决方法

2013-1-6 10:35:49 org.apache.tomcat.util.http.Parameters processParameters 警告: Parameters: Characte...

解决get方法传递URL参数中文乱码问题

get post 乱码问题

解决get方法传递URL参数中文乱码问题

来自:http://www.javaeye.com/topic/483158 应用一:解决tomcat下中文乱码问题(先来个简单的)  在tomcat下,我们通常这样来解决中文乱码问题: 过滤器代码...

url中向后台传递中文乱码解决方法

 方法一: 1、jsp中代码   var userNo = $('#prisoner_id').val();       userNo = encodeURI(userNo);     ...

解决通过url传递中文参数乱码的问题

1 url : '../../admin/PCarType_getCarTypeInfo2.action?departId='+id+'&departName='+escape(escape(dep...

解决get方法传递URL参数中文乱码问题

应用一:解决tomcat下中文乱码问题(先来个简单的)  在tomcat下,我们通常这样来解决中文乱码问题: 过滤器代码: [java] view plain c...

解决get方法传递URL参数中文乱码问题

[转]解决get方法传递URL参数中文乱码问题 来自:http://www.javaeye.com/topic/483158 应用一:解决tomcat下中文乱码问题(先来个简单的) ...

url中向后台传递中文乱码解决方法

url中向后台传递中文乱码解决方法 方法一: 1、jsp中代码   var userNo = $('#prisoner_id').val();       userNo = encod...
  • wkj001
  • wkj001
  • 2016年11月06日 14:54
  • 172
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Url传递中文出现乱码解决纪实
举报原因:
原因补充:

(最多只允许输入30个字)