最近在开发过程中遇到不少中文乱码问题,google无数次,总算解决一部分,哦也!
在开发的时候,所有的jsp页面都使用UTF-8编码(UTF-8真是个好东西!)
1.struts中资源文件中如果value为中文,显示乱码
解决办法:使用eclipse插件Properties Editor 更新站点http://propedit.sourceforge.jp/eclipse/updates/(建议自动更新)
步骤:
Eclipse下的“帮助”/“软件更新”/”查找并安装“/选择第二项/“新建远程站点”/name随意写,url输入http://propedit.sourceforge.jp/eclipse/updates/
2.表单提交中文时显示乱码
解决办法:使用servlet过滤器filter
在TOMCAT的目录下的\webapps\jsp-examples\WEB-INF\classes\filters\找到SetCharacterEncodingFilter.java 这个类,放到你的程序中并配置好映射路径。
<filter> <filter-name>Set Character Encoding</filter-name> <filter-class>com.wygl.service.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
这样就ok了,还有个需要注意的地方,当时filter配置好后,提交还是乱码,检查了好久才发现,原来
- "test1.jsp" id="listForm" >
- "test1.jsp" id="listForm" method="post" >
3. struts的中文问题
解决方法:使用自己的ActionServlet
自己写一个MyActionServlet继承ActionServlet
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.struts.action.ActionServlet;
- public class MyActionServlet extends ActionServlet{
- protected void process(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, javax.servlet.ServletException {
- /**@todo Override this org.apache.struts.action.ActionServlet method*/
- request.setCharacterEncoding("UTF-8");
- super.process(request, response);
- }
- }
然后在web.xml里面使用MyActionServlexml
- <servlet>
- <servlet-name>actionservlet-name>
- <servlet-class>com.wygl.service.MyActionServletservlet-class>
- <init-param>
- <param-name>configparam-name>
- <param-value>/WEB-INF/struts-config.xmlparam-value>
- init-param>
- <init-param>
- <param-name>debugparam-name>
- <param-value>3param-value>
- init-param>
- <init-param>
- <param-name>detailparam-name>
- <param-value>3param-value>
- init-param>
- <load-on-startup>0load-on-startup>
- servlet>
这样就ok了
4. mysql的中文问题
解决方法:统一编码
在mysql创建数据库的时候注意选择编码UTF-8
如果使用Spring + Hibernate来开发,在applicationContext.xml中配置dataSource的url时这样写:
- <property name="url" value="jdbc:mysql://127.0.0.1:3306/pm?useUnicode=true&characterEncoding=UTF-8"></property>
5. js,ajax 的中文问题
js使用的是UTF-8编码,只要包含js的页面也使用UTF-8,js就不会出现乱码
关于ajax,通过ajax将数据提交到服务器端,如果数据中有中文,就会出现乱码
原因:tomcat传参使用ISO-8859-1来编码,而web页面和服务器端都使用的是UTF-8
解决方法:使用ajax的POST,不要使用GET,然后在服务器端这样写
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"), "utf-8");
解决!