servlet&jsp 各种乱码问题

来源:互联网 发布:c语言大于号怎么打 编辑:程序博客网 时间:2024/04/27 07:55

前言

在这里,所有的乱码问题都是指中文乱码。


request.getParameter(),获取请求参数出现中文乱码

1、问题描述

点击超链接,超链接的请求路径里有请求参数。然后,获取请求参数,获取到的值出现中文乱码。


2、原因分析

点击超链接发出的请求是GET请求,在tomcat服务器里,通过request.getParameter()来获取请求参数时,tomcat默认是采用ISO-8859-1编码格式对中文进行编码的。所以,获取到的请求参数的值,自然就是乱码的。


中文乱码已经产生,也就是说目前的数据/汉字是乱码的,现在不管.jsp文件的字符集是utf-8还是ISO-8859-1,最终在浏览器里显示的都是中文乱码。原因如下,假设.jsp文件的字符集是utf-8,那么只有当数据是用utf-8编码的时候,浏览器页面才显示中文、才不会乱码;假设.jsp文件的字符集是ISO-8859-1,虽然获取的请求参数的值此时也是ISO-8859-1,此时二者字符集一致,但是ISO-8859-1字符集是无法正常显示中文的,所以还是会乱码。


只有获取的数据的值是utf-8编码,同时.jsp文件的字符集也是utf-8编码,这个时候中文才不会乱码。



3、解决方法

对获取到的请求参数的值,重新进行编码。


示例

String title = new String(request.getParameter("title").getBytes("iso-8859-1"),"utf-8");


编码之后的数据的字符集是utf-8,.jsp文件的字符集也是utf-8,中文显示正常。



4、参考

http://wenku.baidu.com/link?url=8XHNr4PqNpTQkI7w_F2oqjz-gDT31nk15TBj0BeMWXRLXZhGxPoPtefJf03GJeLafY8KWdJJvjMpjWdHLBkngnsbYlhHUwqbnoXdVK8oTxW


5、总结

我觉得最关键的问题是,要明白一个汉字是由什么组成的,什么中文/中文乱码啊、各种字符集啊,越听越糊涂,越讲越糊涂。


一个汉字,如果是采用ISO-889-1字符集编码,那么一个汉字由3个字节组成的,例如:龚,由3个十六进制的字节组成(见下面的示例和图片)。

一个汉字,如果是采用utf-8编码的,那么一个汉字仍然是由3个十六进制的字节组成的——但是这个时候每个字节前面多了一个百分号%(见下面的示例和图片)。

示例

function toGIS(){var url = "index.jsp?id=1&title=强奸&address=policeAddress&lngX=106.284002&latY=38.453978";url = encodeURI(url); //index.jsp?id=1&title=%E5%BC%BA%E5%A5%B8&address=policeAddress&lngX=106.284002&latY=38.453978document.getElementById("toGIS").setAttribute("href", url);document.getElementById("toGIS").click();}



(说明:发送请求时,请求路径经过js的encodeURL函数进行重新编码,encodeURL()函数是采用utf-8对中文进行编码的)



0 0