当前位置:文档之家› 中文乱码解决大全

中文乱码解决大全

SSH开发过程中的中文问题汇总作者:Rainisic来源:博客园发布时间:2012-01-11 14:26 阅读:50 次原文链接[收藏]在使用SSH开发的过程中,我们经常会因为各种各样的中文乱码问题而苦恼。

之前开发的过程中遇到过一些,但是都没有记录下来,这次,我就遇到的中文问题进行一个汇总,希望能够对大家有所帮助。

1. 平台环境参数操作系统:Windows 7 旗舰版64位JDK版本:JDK 1.6 / JDK 1.7 (此处由于JDK 7 发布不久,所以对两个版本进行测试)开发环境:Eclipse Java EE Indigo网站容器:Tomcat 7.0开发框架:Struts 2.3.1.1-GASpring 3.1.0-releaseHibernate 4.0.0-Final / Hibernate 3.6.9-Final (此处由于Hibernate 4 final 刚刚发布不久,所以对两个版本进行测试)2. 中文问题汇总(1)HTML中未指定文件编码问题描述:在HTML中未指定文件编码,在部分浏览器中将会出现中文乱码。

解决方案:在HTML的head标签中指定文档编码,代码如下(请根据DOCTYPE选择):// HTML 4.01 Transitional<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">// HTML 5<meta charset="UTF-8">(2)表单提交使用GET方法问题描述:在HTML form 中提交表单的时候使用method="get"导致中文乱码。

解决方案:form表单的method设置为post,代码如下:<form action="test" method="post"><input type="submit"/></form>(3)JSP文件中未指定文档编码类型问题描述:在JSP文件中未指定JSP文档编码,在浏览器中会出现中文乱码。

解决方案:在JSP文件首部增加指定文档编码的代码,代码如下:<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>(4)文件编码不正确问题描述:由于Java文件、JSP文件等文件编码不正确,导致中文乱码。

解决方案:设置文件的默认编码为UTF-8(如果需要使用其他编码,请确保上述两个编码格式与文件编码相同)设置方法:当前文件编码修改:该文件右键→Properties→Resource,右侧Text file encoding→Other →UTF-8默认文件编码修改:0. Windows→Preferences 打开Eclipse配置选项窗口。

1. General→Content Type,右侧Text 下面所需要的文件类型Default encoding设置为UTF-82. General→Workspace,右侧Text file encoding 选择UTF-83. Web→JSP Files,右侧Encoding选择UTF-8(显示的是ISO 10646/Unicode(UTF-8))Hint: 可以利用Eclipse配置选项窗口左上处的搜索功能,输入“Encoding”即可找到全部。

(5)Struts 2 默认编码错误问题描述:Struts 2 默认编码为UTF-8,如使用GBK等其他编码则会出现中文乱码。

解决方案:struts.xml 中设置默认Struts 2 编码,代码如下:<constant name="struts.i18n.encoding" value="UTF-8"></constant>(6)Request、Response编码错误问题描述:由于Response、Request的属性characterEncoding设置错误,导致中文乱码。

解决方案:添加Filter,用于给Request、Response转码,一定要配置在Struts 2的Filter之后!代码如下:/** 用于转码的Filter类。

*/public class EncodingFilter implements Filter {@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {// Set the request and response character encoding.request.setCharacterEncoding("utf-8");response.setCharacterEncoding("utf-8");chain.doFilter(request, response);}@Overridepublic void init(FilterConfig arg0) throws ServletException {}}<!-- web.xml中的配置,一定要配置在Struts 2之后! --><filter><filter-name>EncodingFilter</filter-name><filter-class>com.mb.filter.EncodingFilter</filter-class></filter><filter-mapping><filter-name>EncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>(7)实现ServletResponseAware并使用PrintWriter的Bug暂时不确定是Bug,一会我会去看Struts 2源代码以确定是否是Bug,如果是Bug有可能会在将来版本修复。

问题描述:通过实现ServletResponseAware接口而得到的response没有更改characterEncoding,而导致PrintWriter编码错误。

这样出现的乱码问题,乱码的内容是静态HTML的中文中,而不是在后台数据和前台Struts便签显示的内容。

(之所以说是Bug,是因为同样实现ServletRequestAware接口,获得的request确是更改过文字编码的。

)解决方案:实现ServletResponseAware时手动修改Response的characterEncoding,代码如下:@Overridepublic void setServletResponse(HttpServletResponse response) {// Change the response encoding.response.setCharacterEncoding("UTF-8");this.response = response;try {this.out = response.getWriter();} catch (IOException e) {}}(8)以上办法都不管用问题描述:以上解决方案都不管用的时候,用这个办法试试吧,最后的绝招了。

解决方案:修改Tomcat的默认编码,修改方法如下:1. 进入Tomcat目录,找到主目录下/conf/server.xml 文件,使用记事本编辑。

2. Ctrl + F 搜索“8080”,找到如下代码,并修改。

<!-- 原有代码 --><Connector port="80" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"/><!-- 修改为如下代码 --><Connector port="80" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"URIEncoding="UTF-8"/>修改Tomcat默认编码之后,大多数乱码问题都会被解决。

以上为我所遇到过的中文乱码问题,如果有不齐全的,希望大家补充。

一、JSP页面显示乱码下面的显示页面(display.jsp)就出现乱码:<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>对不同的WEB服务器和不同的JDK版本,处理结果就不一样。

原因:服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。

解决办法:在JSP页面中指定编码方式(gb2312),即在页面的第一行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除乱码了。

完整页面如下:<%@ page contentType="text/html; charset=gb2312"%><html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%out.print("JSP的中文处理");%></body></html>二、表单提交中文时出现乱码下面是一个提交页面(submit.jsp),代码如下:<html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><form name="form1" method="post" action="process.jsp"><div align="center"><input type="text" name="name"><input type="submit" name="Submit" value="Submit"></div></form></body></html>下面是处理页面(process.jsp)代码:<%@ page contentType="text/html; charset=gb2312"%><html><head><title>JSP的中文处理</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head><body><%=request.getParameter("name")%></body></html>如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。

相关主题