2024年4月2日发(作者:)

中文乱码问题汇总

(1) HTML中未指定文件编码

问题描述:在HTML中未指定文件编码,在部分浏览器中将会出现中文乱码。

解决方案:在HTML的head标签中指定文档编码,代码如下(请根据DOCTYPE选择):

// HTML 4.01 Transitional// HTML 5

(2) 表单提交使用GET方法

问题描述:在HTML form 中提交表单的时候使用method="get"导致中文乱码。

解决方案:form表单的method设置为post,代码如下:

......

(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-8

2. General→Workspace,右侧 Text file encoding 选择UTF-8

3. Web→JSP Files,右侧Encoding选择UTF-8(显示的是ISO 10646/Unicode(UTF-8))

Hint: 可以利用Eclipse配置选项窗口左上处的搜索功能,输入“Encoding”即可找到全部。

(5) Struts2 默认编码错误

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

解决方案: 中设置默认Struts 2 编码,代码如下:

(6) Request、Response编码错误

问题描述:由于Response、Request的属性characterEncoding设置错误,导致中文乱码。

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

/* * 用于转码的Filter类。 */

public class EncodingFilter implements Filter

{ @Override

public void destroy() { ...... }

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException

{

racterEncoding("utf-8");

racterEncoding("utf-8");

er(request, response);

}

@Override

public void init(FilterConfig arg0) throws ServletException { ...... }

}

EncodingFilter

ngFilter

EncodingFilter

/*

(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.

racterEncoding("UTF-8");

se = response;

try { = ter(); } catch (IOException e) { } }

(8) 以上办法都不管用

问题描述:以上解决方案都不管用的时候,用这个办法试试吧,最后的绝招了。

解决方案: 修改Tomcat的默认编码,修改方法如下:

1. 进入Tomcat目录,找到主目录下 /conf/ 文件,使用记事本编辑。

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

修改Tomcat默认编码之后,

大多数乱码问题都会被解决。

一、JSP页面显示乱码下面的显示页面()就出现乱码:

JSP的中文处理

<%

%>

对不同的WEB服务器和不同的JDK版本,处理结果就不一样。原因:服务器使用的编码方式不同和浏览器对不同的字符显示结果不同而导致的。解决办法:在JSP

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

<%@ page contentType="text/html; charset=gb2312"%>

JSP的中文处理

<%

%>

二、表单提交中文时出现乱码下面是一个提交页面(),代码如下:

JSP的中文处理

("JSP的中文处理");

("JSP的中文处理");

下面是处理页面()代码:

<%@ page contentType="text/html; charset=gb2312"%>

JSP的中文处理

<%=ameter("name")%>

如果提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF-8编码方式来发送请求,而UTF- 8和GB2312编码方式表示

字符时不一样,这样就出现了不能识别字符。

解决办法:通过acterEncoding ("gb2312")对请求进行统一编码,就实现了中文的正常显示。

修改后的代码如下:

<%@ page contentType="text/html; charset=gb2312"%>