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原创文章,转载请注明出处

url传递中文乱码解决

url传递中文时候乱码:      解决方案1: var url = ""; window.location.href = encodeURI(url);      正常情况下这样转码一...
  • u010346624
  • u010346624
  • 2015年04月10日 17:02
  • 354

JSP URL中文传递出现乱码解决

最近经常出现在URL传递中文时出现乱码问题,这里总结以下几个解决方法: 1.   String content= new String(request.getParameter("contents"...
  • weiyirong
  • weiyirong
  • 2012年03月21日 22:24
  • 1336

CodeIgniter中URL含有中文字符串的解决方案

codeIgniter默认的配置下是不允许URL中包含非ASCII字符的,如果我们有这样一个字符串: 那么CI会毫不客气的告诉你: The URI you submitted has disall...
  • andy1219111
  • andy1219111
  • 2012年02月07日 13:22
  • 3747

解决页面传到后台含中文参数时会乱码问题

一直没有写博客的习惯 既然开始写了以后就写点东西吧。 不废话,直接到重点。 今天在写个人博客系统的时候一个问题。 简单来说就是在写分类按日期查询调用数据库(MySQL)的时候没有竟然没有查到数据。...
  • thecloud571
  • thecloud571
  • 2016年11月03日 22:41
  • 3819

在URL中传递中文的解决方式

在URL中传递中文的解决方式;服务器和浏览器客户端配置,额外对不兼容情况下进行前端编码然后再发送请求...
  • ThinkingLink
  • ThinkingLink
  • 2015年05月13日 17:13
  • 8128

js对url网页地址中文乱码问题的处理方法

先看例子: 有这么一个网页地址:http://www.17xmf.com/index.php?act=exercises&kd=3258&kname=不等式的解法(分析法、综合法、比较法). 当我...
  • gayayzy
  • gayayzy
  • 2012年09月19日 11:21
  • 6477

在URL中传递中文参数时传递失败的解决方案

环境:Tomcat问题描述:使用 标签的 herf 来传递页面的参数时,英文正常,中文失败原因分析:使用 Tomcat 在URL中传递参数,是通过 HTTP 报头来传递的,与表单传递不同,表单中传递...
  • aspenstars
  • aspenstars
  • 2017年08月04日 12:50
  • 564

url传递中文的解决方案

作者:xrascal      出处:aspxcnurl传递中文的解决方案 1.设置web.config文件。(我不喜欢设置成这样) ...... ...... 2.传递中文之前,将要传递的中文...
  • 21aspnet
  • 21aspnet
  • 2004年10月25日 19:46
  • 2197

Url 传递中文 加密

JavaScript var url = "xxx.jsp?op=expExcel&carrierState="+encodeURI(encodeURI(carrierState)); //注意...
  • yn49782026
  • yn49782026
  • 2015年07月24日 08:57
  • 1019

html 之间如何通过URL传输参数,并解决中文乱码问题

首先先看一个HTML页面间传递参数的小例子:                              当在输入框中输入内容后,点击搜索,应用就会跳转到搜索页面,并传递了上一个页面搜索的内容“九”...
  • qq_30979185
  • qq_30979185
  • 2017年05月28日 19:31
  • 7920
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Url传递中文出现乱码解决纪实
举报原因:
原因补充:

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