对于get方式传参的中文乱码的解决方案

movieName='风声';

playUrl='/movie/风声/风声.rm';

url="play.jsp?movieName="+movieName+"&playUrl="+playUrl



若按照上述的地址直接访问,则中文会变成乱码。必须使用encodeURI('风声')进行两次编码。如下:

url="play.jsp?movieName="+encodeURI(encodeURI(movieName))+"&playUrl="+encodeURI(encodeURI(playUrl))



服务器通过以下方式获取值:

movieName=URLDecoder.decode(movieName,"utf-8");

playUrl=URLDecoder.decode(playUrl,"utf-8");

==========================
首先如果不编码,那些非英文abc等字符会被浏览器按照网页当前的字符集进行编码传到服务器去, 而服务器则只会按照服务器配置的字符集编码(有默认的好像就是ISOxxxx)进行解码,所以如果网页的字符集和服务器字符集解码一致那么就不会出乱码!

但是往往对于我们来说是不一致的。所以一般情况会出现乱码, 所以就有人想到用encodeUri来进行编码再发送到服务器,但是要注意encodeUri来编码是以utf-8来进行编码的,而服务器对于url里面的非abc等字符进行解码几乎默认都不是utf-8
所以如果你encodeUri一次的话, 通过request.getParam...而得来的是被服务器以另外一种(一般是ISO...)编码解码得到的.所以通过utf-8编码过后 再通过ISO解码当然获得的是乱码, 即使你通过decode(xxx, 'utf-8')获取之后的也不对,因为这个过程是 utf-8编码 ---- iso解码 ----- utf-8解码,这个过程当然不对了哦!


而通过两次编码再通过两次解码为什么就对了呢, 她是这么一个过程   utf-8编码-utf-8编码 ---   ISO解码 ----utf-8解码。

在这里要注意   因为通过第一次utf-8编码之后的都全是英文字符了,对于英文字符 utf-8编码 和ISO编码是一样的效果
所以上面的过程就相当于 utf-8编码-ISO编码 ---   ISO解码 ----utf-8解码 这样一个过程是对称的当然最后会得到正确的结果了

你可能感兴趣的:(中文乱码)