• 14
  • 8月

最近在用netbeans研究Webwork开发,在被折腾死去活来,差点被气得把电脑从窗口扔出去后,终于用utf-8统一编码,搞定了中文乱码问题。

先声明一下自己使用的环境:WindowsXP + netbeans5.5.1中文版 + Webwork插件 + java1.6 + mysql5.0。使用netbeans内置Tomcat。

中文乱码的问题主要表现在

  • jsp中使用webwork的tag,Label中使用中文无法通过编译。提示“编码GBK的不可映射字符”。
  • 将中文写入mysql数据库中时,全部变成“??”

页面之间传参没有乱码。Action的结果页面可以正常接收并显示。

经过一番查找,找到了问题所在:

  • netbeans模板生成的jsp默认为utf-8编码
  • java源文件编码与本地系统一致,在Windows下应该是GB2312。
  • mysql的JDBC驱动默认使用ISO8859_1
  • mysql新建数据库字符型数据默认编码为Latin1

其中最后两项基本是兼容的,其他的之间就会兼容性问题了。乱码及变“?”就是在这些不同编码之间传递或组合之中出现的。

解决的原则很简单:统一编码。

我现在使用的是统一为utf-8,优点是确保在不同系统上的兼容性(目前几乎所有系统都能良好支持utf-8),缺点是中文一个字在utf-8编码中会占用3个字节,比gbk多占用一半的空间。

1)jsp文件无需改变。只需确认jsp头部有

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

html头部有以下声明:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

2)Java源文件

在netbeans中打开“工具”-“选项”,在打开的选项卡中点击左下角的“高级选项”,在左侧的树中找到“编辑”-“Java源代码”,在“缺省编码”中输入“utf-8”

3)数据库连接

连接数据库时的url中加入编码选择:

jdbc:mysql://localhost/regtest?user=root&password=root&useUnicode=true&characterEncoding=UTF8

4)数据库编码

在mysql中建库时将数据库的编码设为“utf8_general_ci”。

OK,在我的系统上完成这些后乱码再也没出现过。有空的话再研究一下gbk编码下的解决。

标签:

您可以对这篇文章发表一条评论,或者在您自己的网站中引用 (Trackback) 它

发表一条评论

所有标签:.net Ajax Java javascript Linux map MySQL RSS TD-SCDMA Ubuntu vim web Win7 乱码 基础知识 备份 奥运会 希望泉 性能 缓存 编程