首页 > 其他分享 >Url传递中文出现乱码解决纪实

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

时间:2023-09-04 16:36:50浏览次数:40  
标签:decode 纪实 UTF 编码 Url filename 乱码 jsp


作者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.  好,那么行不行呢?答案是:不行,原因我现在还没找到,找到了会在此补充,如果哪位知道,还望指点。
解决办法:把代码行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);

 

 

 

标签:decode,纪实,UTF,编码,Url,filename,乱码,jsp
From: https://blog.51cto.com/u_16245757/7352063

相关文章

  • sql server2005 jdbc解决自动自动增长列统一处理问题纪实
    作者fbysss关键字:自动增长列,jdbc,sqlserver2005背景:系统要支持多种数据库,统一insert的时候获取自动增长列的处理方式问题1:insert+select方案sqlserver2000可以使用insertSql +SELECT@@IDENTITYAS'Identity'的方式来获得,但是mysql则只能使用executeUpdate(insertSql);execut......
  • SQL备忘-基本控制语句复习及@@ROWCOUNT陷阱纪实
    作者fbysss关键字:SQL语句      好久不写复杂的sql语句,以至于很多东西都忘记。以至于写出@name="sss"来(应该使用单引号)还是写日志好,一些小的知识点很快可以查到,所以有机会就赶紧贴上来,顺便给需要的人参考。下面这段很简单,但是很容易陷入@@rowcount的“想当然”陷阱。declare......
  • tomcat 5日志配置笔记(解决中文乱码)
    作者:fbysss关键字:Tomcat日志环境:linux前言:采用默认的tomcat日志,无法解决中文信息输出乱码的问题。tomcat5中,可以使用log4j或者javalogging配置文件对日志输出进行配置。以下是相关试验记录。如果common/lib下没有common-logging.jar和log4j.jar输出正常的日志。catalina.out记录......
  • cmd控制台中文乱码
    切换活动页编码cmd控制台中执行:chcp65001C++代码中执行system("chcp65001");注:CHCP是一个计算机指令,能够显示或设置活动代码页编号。代码页 描述65001 UTF-8代码页950繁体中文936简体中文默认的GBK437MS-DOS美国英语......
  • javaweb中解决get与post中文乱码问题的方式
    2023-09-03packagecom.hh.RequestAndResponse;/***@authorhh*@version1.0*@DATE2023-09-0312:51:44*/importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servl......
  • DEV++6.3 中文乱码配置 方法来源网上。
    DEV++6.3中文乱码配置不显示注释问题菜单栏》工具》编辑器属性》显示》编辑器字体口<ID27071translationmissing>去掉勾选。方法1菜单栏》工具》编译器选项》编译器(编译时加入以下命令✔)命令为:-fexec-charset=gbk菜单栏》工具》编辑器属性》基本》编辑器选项》NewDocum......
  • cURL error 60: SSL certificate problem: certificate has expired解决办法
    出现这个原因是因为Let’sEncrypt证书停止了HTTPAPI的请求支持,导致我们使用Let’sEncrypt证书的网站没办法更新证书,就出现了证书过期的提醒,所以我们只需要手动更新下证书就行了。1、下载https://curl.se/ca/cacert.pem 这个文件;2、将cacert.pem里面的内容替换到/wp-includ......
  • windows10创建conda环境失败:CondaHTTPError: HTTP 000 CONNECTION FAILED for url <htt
    问题描述创建新环境时,报错,创建不成功Collectingpackagemetadata(current_repodata.json):doneSolvingenvironment:doneCondaHTTPError:HTTP000CONNECTIONFAILEDforurl<https://conda.anaconda.org/conda-forge/linux-64/current_repodata.json>Elapsed:-AnHTTP......
  • 工作中你会使用到 grpcurl 吗?
    在平时的开发过程中,我们一般是http接口对外,grpc接口对内部微服务相信对于如何去请求http接口,大家都很熟悉了如果是inux里面使用curl命令在windows里面我们可以使用postman来请求接口如果对于一个云上开发的接口的话,我们可能会使用apifox来进行请求那么......
  • centos7 中 configure: error: libcurl library not found
     001、configure:error:libcurllibrarynotfound 002、解决方法[root@pc1test01]#yum-yinstalllibcurl-devel 。 ......