一、编码介绍和选择原则 为使struts应用顺利处理中文字符,防止乱码,一般的原则是尽可能在所有的地方使用同一种编码 。
strtus和MySQL数据库等一般默认的编码为 ISO8859-1 ,适用于拉丁字符;
适用于简体中文的常用编码有: UTF-8(ISO10646标准),GB2312(中文字较少),GBK(微软的扩充编码,非标),GB18030(新国标)。
如果程序只针对中文用户,不考虑拉丁文(如英语)之外的国际化,我们可以选择上述任何一种字符;如果需要国际化,应选择UTF-8,以获得最大限度的适应 性。
下面的介绍以 UTF-8 编码为例。
二、数据库字符集选择
新建数据库时,选择 UTF-8 编码。
也可以配置 MySQL 使用 UTF-8 为默认字符编码。
开始菜单 -> MySQL -> MySQL Server -> MySQL Server Instance Config Wizard :
也可以选择第三个选择,在列表中选择"utf8"。
三、jsp 文件
在头部使用 <%@ page language="java" pageEncoding=" UTF-8 "%>
<html>的<head>部分使用:<META http-equiv=Content-Type content="text/html; charset= UTF-8 "> ,该行代码仅当有的时候才 需要更改。
如果需要修改 eclipse 默认的 jsp 编码,如下操作:
eclipse -> window -> preferances 打开首选项窗口:
四、编码转换
可以使用以下三个方法之一,把表单提交的数据转换为中文:
1、ActionForm 的 validate()方法中,通过代码手工转换每个String。
例如要转换 name 属性:
try {
this. name = new String(this.name .getBytes("ISO8859-1"), "UTF-8");
} catch (UnsupportedEncodingException e) {
}
该方法的缺点是: 1) 必须配置使用此 ActionForm 的 Action 要求验证;2) 每个属性都要手工编码转换,比较烦琐。
2、使用过滤器进行编码转换: (适用于所有java web应用)
在过滤器的 doFilter() 方法中加入:request.setCharacterEncoding("UTF-8"); 并 配置此过滤器过滤所有的路径/*
3、扩展ActionServlet: (适用于struts应用)
重写process()方法,在调用super.process()之前,加入: request.setCharacterEncoding("UTF-8"); 并配置此 ActionServlet 替代原 struts 的标准 ActionServlet。
注:方法1,2,3任选其一。
五、资源文件:
为便于在资源文件中输入中文,可以下载 JInto 插件(适用于eclipse)。
如果struts应用考虑国际化,可以在默认资源中输入英文,增加中文资源,输入对应的中文字;
如果只针对简体中文,可以直接使用默认资源,在里面输入中文。