﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-天下难事，必作于易；天下大事，必作于细-文章分类-Useful articles</title><link>http://www.blogjava.net/flyepp/category/25577.html</link><description>如果我有方向，那就是远方</description><language>zh-cn</language><lastBuildDate>Tue, 04 Sep 2007 09:15:13 GMT</lastBuildDate><pubDate>Tue, 04 Sep 2007 09:15:13 GMT</pubDate><ttl>60</ttl><item><title>Url传递中文出现乱码解决纪实 </title><link>http://www.blogjava.net/flyepp/articles/142667.html</link><dc:creator>flyepp</dc:creator><author>flyepp</author><pubDate>Tue, 04 Sep 2007 08:34:00 GMT</pubDate><guid>http://www.blogjava.net/flyepp/articles/142667.html</guid><wfw:comment>http://www.blogjava.net/flyepp/comments/142667.html</wfw:comment><comments>http://www.blogjava.net/flyepp/articles/142667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/flyepp/comments/commentRss/142667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/flyepp/services/trackbacks/142667.html</trackback:ping><description><![CDATA[
		<div class="postTitle">
				<a href="http://blog.csdn.net/fbysss/archive/2006/06/20/816639.aspx">
						<img height="13" src="http://blog.csdn.net/images/authorship.gif" width="15" border="0" /> Url传递中文出现乱码解决纪实</a>
		</div>
		<div class="postText">
				<p>
						<font color="#339966">作者fbysss<br />msn:jameslastchina@hotmail.com  <br />blog:blog.csdn.net/fbysss<br />声明：本文由fbysss原创，转载请注明出处<br />关键字：乱码</font>
				</p>
				<p>
						<strong>文件1：encode.jsp</strong>
				</p>
				<p>&lt;%@ page language="java" contentType="text/html; charset=GBK"<br />    pageEncoding="GBK"%&gt;<br />&lt;%<br />    String sFileName = "中文文件名.doc";<br /><font color="#ff0000">   </font><font color="#0000ff">sFileName = java.net.URLEncoder.encode(sFileName);//代码行1</font><br />%&gt;<br /> &lt;a href="javascript:decode('&lt;%=sFileName%&gt;');"&gt;decode&lt;/a&gt;<br />&lt;html&gt;<br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gbk" /&gt;<br />&lt;body&gt;<br />&lt;script language="javascript"&gt;<br />function    decode(filename){<br />   <font color="#0000ff">location.href="decode.jsp?filename="+filename;//代码行2<br /></font>}</p>
				<p>&lt;/script&gt;<br />&lt;/body&gt;<br />&lt;/html&gt;</p>
				<p>
						<strong>文件2：decode.jsp</strong>
				</p>
				<p>&lt;%@ page language="java" contentType="text/html; charset=gbk"<br />    pageEncoding="gbk"%&gt;<br />&lt;%<br />    String sFileName = request.getParameter("filename");<br /><font color="#ff0000"> sFileName = java.net.URLDecoder.decode(sFileName,"GBK");//代码行3</font><br />     out.println("filename:"+sFileName);<br />%&gt;</p>
				<p>        看上去，这样肯定可以达到要求了，但是事实不是这样，javascript并不识别jsp编码后的字符串：<br />用鼠标移动到链接上方时，可以看到IE状态栏上的确是正确的编码，即"%D6%D0%CE%C4%CE%C4%BC%FE%C3%FB.doc"<br />然而要注意的是：用鼠标右键点击链接-〉属性看到的URL是javascript:decode('ÖÐÎÄÎÄ¼þÃû.doc');后果可想而知，转向后输出的是乱码。<br />       弄了半天，转UTF-8也是一样，一个小问题整的很郁闷，最后想到，还得在js这里下手。<br />       把encode.jsp代码行1注释掉，代码行2前面加入一行：filename = encodeURI(filename);<br />看到一点进展：转向后的url已经很规范了：filename=%E4%B8%AD%E6%96%87%E6%96%87%E4%BB%B6%E5%90%8D.doc，但是结果仍然是乱码。为啥呢？注意观察，前面的编码和后面是不一样的！<br />然而，javascript的EncodeURI没有提供编码参数,默然就是UTF-8.  好，那么<font color="#ff0000"> sFileName = java.net.URLDecoder.decode(sFileName,"UTF-8");<font color="#000000">行不行呢？答案是：不行，原因我现在还没找到，找到了会在此补充，如果哪位知道，还望指点。<br />解决办法：把代码行3替换成<br />sFileName= new String(sFileName.getBytes("ISO-8859-1"), "UTF-8");<br />现在再看结果，已经是正常的中文了。</font></font></p>
				<p>补充：Ajax中，servlet输出中文之后，需要js读取，同样面临编码问题，可以采取如下方式：<br />在servlet中用URLEncoder编码<font color="#0000ff">sText = URLEncoder.encode(sText,"UTF-8");<br /></font><font color="#000000">在js中用decodeURI解码</font><font color="#0000ff">xText = decodeURI(xText);</font></p>
		</div>
<img src ="http://www.blogjava.net/flyepp/aggbug/142667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/flyepp/" target="_blank">flyepp</a> 2007-09-04 16:34 <a href="http://www.blogjava.net/flyepp/articles/142667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>