中文传值乱码问题总结文档

本文总结了Java Web开发中常见的乱码问题及其解决方案,包括GET、POST请求、JSON及Ext方式下的处理方法,强调了配置URIEncoding、filter、页面编码的重要性,并解释了pageEncoding和charset的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在开发中一定要养成良好的开发习惯,编码最好统一(本文以utf-8为例),当出现乱码时检查filter配置是否配置,页面编码是否有改动等等。检查的地方有以下几点:

1.看tomcat下的conf/server.xml是否加了URIEncoding="utf-8"(对get提交方式起作用)

2.检查请求是否过了filter(对post方式提交起作用)

3.jsp页面编码(encoding)是否有改动<?xml version="1.0" encoding="UTF-8"?>

当这三点都检查通过,一般可以减少很多的乱码问题。

    根据个人遇到过的乱码问题,分析总结大致分以下几类:

一、          get方式:

当页面以”xx.action?name=北京”这种get方式请求服务器时,在action方法体中出现乱码时,最好的方法为在tomcat服务器conf/下的server.xml里加上URIEncoding="utf-8"即可,不需要在action中对页面传过来的值进行转码了:  

<Connector port="8082" protocol="HTTP/1.1"

          URIEncoding="utf-8" 

       connectionTimeout="20000" 

           redirectPort="8443" />


 

二、          post方式:

当页面encoding为utf-8时,页面向服务器发送的请求不经过过滤器不乱码,当页面encoding为gb2312或其它编码时,请求经过过滤器不乱码,不过过滤器则出现乱码,所以一般都把过滤器加上,过滤器的配置为在项目的web.xml中加上:

<filter> 

       <filter-name>encodingFilter</filter-name> 

       <filter-class> org.springframework.web.filter.CharacterEncodingFilter 

       </filter-class> 

       <init-param> 

         <param-name>encoding</param-name> 

         <param-value>utf-8</param-value> 

         </init-param> 

</filter>

<filter-mapping>

     <filter-name>encodingFilter</filter-name>

     <url-pattern>/*</url-pattern>

</filter-mapping>


 

三、          JSON方式:

1、当页面以JSON方式向服务器传值一定记得将中文参数在页面先编码:

var username=escape(encodeURIComponent(username));

然后在action中加上

String  temp = newString(name.getBytes("ISO-8859-1"),"utf-8");

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


 

进行解码,再向数据库交互。否则一定会出现乱码的情况。

2、当从服务器得到数据后,要将数据在页面正常显示出来,一定记得在action中加上:

ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");

否则返回的页面一定出现乱码。

 

四、          Ext方式:

Ext跟JSON实现都是基于JavaScript编程语言的,所以乱码情况处理也是跟JSON一样的。具体处理见上一点。JSON方式。

 

 

 

 

 

 

       如想了解更多传值方面的知识,可再继续阅读以下资料:

      

       1.在JSP页面中pageEncoding和charset和含义是不同的。pageEncoding是指页面的编码格式(请记住!,十分重要~,与显 示无关),也就是说无论你JSP里的pageEncoding采用什么方式,如果出现中文乱码,原因不在于pageEncoding的所指定的编码方式不 对,而在于charset的属性不对。charset是负责JSP页面中的字符按什么编码方式显示。pageEncoding只负责页面的编码格式,而后 JAVA 虚拟机负责按照pageEncoding指定的编码转换成Unicode编码的字节码文件。(也就是说,无论你pageEncoding指定什么 方式,最终都是转换成了Unicode编码。)另外请大家注意,如果从客户端提交的用户请求里的中文也是使用pageEncoding方式编码的。也就是 说,在Servlet中request.getParameter("参数");Tomcat默认是使用ISO-8859-1方式去读取的,但实际里面的 字符编码方式应该是JSP页面pageEncoding所指定的方式。除非用户自己加上request.setCharacterEncoding("编 码方式");

 

2.Tomcat一般总是默认使用ISO-8859-1作为字符编码方式的。所以,除非你在Servlet中使用了 request.setCharacterEncoding("编码方式");指定了特殊的编码方式,否则Tomcat默认使用ISO-8859-1的编 码方式。

 

3.使用request.setCharacterEncoding("编码方式");注 意:request.setCharacterEncoding()仅仅对POST提交方式起作用,对于GET方式提交还是会出现乱码问题。要解决GET 提交中文的乱码问题,可以在Server.xml 的<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
加入:URIEncoding="utf-8" useBodyEncodingForURI="true"
另外,request.setCharacterEncoding()这句话一定要放在要读取的第一参数之前调用。否则也不起作用了!!

 

4、也可以创建一个filter来对编码进行转换,但filter也只对post提交方式起作用,对get无能为力。URIEncoding对post不起作用。

 

5.明白pageEncoding和charset之间的关系。一般而言,如果页面里指定了pageEncoding的方式也就是说,比如:<%@ page language="java" import="java.util.*" pageEncoding="GBK" %>这句话,而没有指定charset的话,那么页面默认是按照charset=ISO-8859-1编码方式显示字符,按照 pageEncoding="GBK"方式进行页面的编码。如果你的JSP页面里面没有指定pageEncoding方式,而只是说明了charset的 话,比如:%@ page contentType="text/html;charset=utf-8"%> 这句话,那么JSP默认是按照pageEncoding="utf-8"进行页面编码的,字符集按照charset=utf-8"显示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值