中文乱码解决汇总

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

中文乱码问题汇总

(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.xml 中设置默认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 {

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");

chain.doFilter(request, response);

}

@Override

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

}

EncodingFilter

com.mb.filter.EncodingFilter

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.

response.setCharacterEncoding("UTF-8");

this.response = response;

try { this.out = response.getWriter(); } catch (IOException e) { } }

相关文档
最新文档