<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="java通过request.getParameter获取汉字乱码问题 如何对url编码解码" id="card1">
<p> 游客</p><p>
标题:java通过request.getParameter获取汉字乱码问题 如何对url编码解码<br/>
正文:<br/>
地址栏中出现汉字的情况有两种，一种是汉字出现在URL的路径部分，一种是汉字出现在URL的传参的部分，第二种情况的时候必须采用编码后传参，接受时解 码的方式完成传参。js中编码有escape(),encodeURI(),encodeURIComponent()三个常用的方法，escape() 常常用在提交页面和处理页面的编码格式相同的情况下（比如它们都是GB2312），encodeURI()和encodeURIComponent()的 用法基本相同，区别在于encodeURIComponent()也对&amp;quot;?&amp;quot;等特殊字符进行编码。 一开始遇到中文参数的时候，使用encodeURI()进行了一遍编码，传过去后，发现解码出现问题，于是想到可能是编码方法使用错误，于是使用escape()方法，这时发现解码时抛出isHexDigit异常。借助百度搜索isHexDigit异常， 发现原来，是escape()方法造成了异常，同时了解了浏览器传递地址的一些原理，在浏览器地址栏里，浏览器认为%是个转义字符，浏览器会把%与%之间的编码，两位两位取出后进行解码,然后再传递给处理页面， 然后由处理页面进行再次解码。由此我想到一直使用encodeURI方法是正确的，只是需要使用两次encodeURI方法，例如encodeURI(encodeURI(&amp;quot;中文&amp;quot;));第一次是把中文编码成%xy的格式， 第二次是对%xy中的%进行编码,%编码成%25。整个传参过程大体应该是：提交页面使用encodeURI(encodeURI(&amp;quot;挎包包&amp;quot;))编码,把最后的编码结果%25xy传递给处理页面的过程中，浏览器获取URL地址 （注意openModelDialog方法，浏览器获取不到参数编码）后解码成%xy，然后把%xy传递给处理页面,处理页面使用URLDecoder.decode(request.getParameter(&amp;quot;参数名&amp;quot;),&amp;quot;UTF-8&amp;quot;);完成解码。 总结： 1、汉字出现在URL路径部分的时候不需要编码解码; 2、使用encodeURI进行2次编码; 3、在openModelDialog()打开的模式窗体里没办法<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=605&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=605&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=605&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=605&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=605">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=605">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>