关于项目中遇到的页面URL传值乱码或者个别字段(回显字段)乱码的问题

一:如果遇到回显乱码或者传值乱码:

        

如以下乱码问题   ↓

关于项目中遇到的页面URL传值乱码或者个别字段(回显字段)乱码的问题

二:首先检查自己的tomcat版本:如果是 8.0 以下版本 需要在配置文件中添加编码格式:配置保存之后重启就OK 了

  建议直接使用tomcat 8.0

  关于项目中遇到的页面URL传值乱码或者个别字段(回显字段)乱码的问题

useBodyEncodingForURI="true" URIEncoding="UTF-8">

结果图:OK

关于项目中遇到的页面URL传值乱码或者个别字段(回显字段)乱码的问题

三、高级解决方法

这是因为,在 tomcat4 和 tomcat5 中对参数的处理是不一样的,在 tomcat4 中 get 与 post 的编码是一样的,所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。

然而,在 tomcat5 中,get 与 post 的处理是分开进行的 在 tomcat 5 中,为了解决编码问题,tomcat 的作者作了很多努力,具体表现为在 tomcat 的配置文件 server.xml 中对 Connector 元素增加了如下的配置参数,专门用来对编码进行直接的配置 URIEncoding 用来设定通过 URI 传递的内容使用的编码,tomcat 将使用这里指定的编码对客户端传送的内容进行编码。

什么是 URI 呢?

java doc 的说明中如下说明:URI 是统一资源标识符,而 URL 是统一资源定位符。

因此,笼统地说,每个 URL 都是 URI,但不一定每个 URI 都是 URL。这是因为 URI 还包括一个子类,即统一资源名称 (URN),它命名资源但不指定如何定位资源。 也就是说,我们通过 get 方法提交的参数实际上都是通过 uri 提交的,都由这个参数管理,如果没有设定这个参数,则 tomcat 将使用默认的 iso8859-1 对客户端的内容进行编码。 useBodyEncodingForURI 使用与 Body 一样的编码来处理 URI, 这个设定是为了与 tomcat4保持兼容,原来在 tomcat4 和 tomcat5 中队参数的处理是不一样的,在 tomcat4 中 get 与 post 的编码是一样的,所以只要在过滤器中通过 request.setCharacterEncoding 设定一次就可以解决 get 与 post 的问题。

然而,在 tomcat5 中,get 与 post 的处理是分开进行的,对 get 的处理通过 前面的 URIEncoding 进行处理,对 post 的内容依然通过 request.setCharacterEncoding 处理,为了保持兼容,就有了这个设定。 将 useBodyEncodingForURI 设定为真后,就可以通过 request.setCharacterEncoding 直接解决 get 和 post 中的乱码问题。 这样,我们可以通过在 server.xml 中设定 URIEncoding 来解决 get 方法中的参数问题,使用过滤器来解决 post 方法中的问题。 或者也可以通过在 server.xml 中设定 useBodyEncodingForURI 为 true ,配合过滤器来解决编码的问题。 在这里,我强烈建议在网站的创作过程中,全程使用 utf-8 编码来彻底解决乱码问题。

 

具体操作如下:

1、页面内容使用 utf-8 格式保存,在页面中加入

<mete http-equiv="contentType" content="textml;charst=utf-8">

 

2、服务器端的 server.xml 中设定 useBodyEncodingForURI = true

3、使用过滤器,过滤器设定编码为 utf-8

四:如果有一些转码也转不过来的话,可是试试打开tomcat的server.xml,找到并在最后加上useBodyEncodingForURI="true" URIEncoding="UTF-8",如下

<Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="80" redirectPort="8443"  useBodyEncodingForURI="true" URIEncoding="UTF-8">

 

五: 如果用jstl的话,可以自己写一个el的function,调用URLEncoder.encode来编码。

IE缺省对URL后面的参数是不编码发送的,但是tomat缺省是按ISO8859-1来进行URL解码,因此才会出现上述错误。好的做法是:

1、在URL参数中确保用UTF-8编码之,方法可以用js函数encodeURI(),或调用自定义的el function;

2、设置server.xml中的Connector熟悉URIEncoding="UTF-8",确保解码格式与编码格式统一;

方法四: view plaincopy to clipboardprint?

在action中,String s=request.getParameter("s"); s=new String(s.getBytes("iso-8859-1"),"gbk");

六:js的乱码解决

1.客户端: url=encodeURI(url);

服务器: String linename = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");

2.客户端: url=encodeURI(encodeURI(url)); //用了2次encodeURI

服务器: String linename = request.getParameter(name); //java : 字符解码

linename = java.net.URLDecoder.decode(linename , "UTF-8");