一、使用native2ascii命令使资源文件支持中文
从Struts1.x教程:validate方法数据验证文章中的ErrorDescription.properties文件中可以看到所有的错误提示信息都是英文的.在客户端显示这些英文信息没有任何问题.但如果将这些英文错误提示信息改成相应的中错误提示信息又会如何呢?
在修改之前,先让我们选中ErrorDescription.properties文件,单击右键,在右键菜单中选择「Properties」菜单项,打开属性设置对话框,在右侧所列的项目中选择「Resource」.看一下右下角的"Textfileencoding"的编码格式,如果编码格式不是UTF-8或GBK(也包括GB2312、GB18030),请将编码格式修改为UTF-8或GBK,否则无法使用MyEclipse的属性编辑器输入中文.在设置完属性文件的编码格式后,将ErrorDescription.properties文件的内容按着该文件的英文版所示修改成中文提示信息.
中文版的ErrorDescription.properties
error.user.blank = 用户名不能为空.
![native2ascii命令(2) native2ascii](http://img.aihuau.com/images/01111101/01073654t014f44580b871c6866.jpg)
error.password.blank = 密码不能为空.
error.password1.confirmation = 密码不匹配.
error.email.blank = Email不能为空
error.email.invalid = 不是一个正确的email地址
重新启动Tomcat后,在IE中输入如下的URL:
http://localhost:8080/samples/simpleValidation.jsp
当出现信息输入界面后,点击"提交"按钮,将会显示如图1的效果.
图1
也许很多读者会感到奇怪.我们已经将属性文件的编码格式修改为UTF-8或GBK了,而且所输入的中文在MyEclipse中也能正常显示,并且页面中的设置的编码格式也和属性文件中的编码格式一致,那么为什么会输出乱码呢?
产生这个问题的原因要从Java对各种类型的文件的处理方式上说起.Java在处理*.java文件时,无论*.java文件的编码格式是UTF-8还是GBK.在使用javac.exe编译时,都会将其转换成UCS-2编码格式.因此,*.java文件就不会出现乱码.而Java在处理属性文件时,只能处理ISO8859-1(也称为latin-1或"西欧语言")或UCS-2(uxxxx格式)编码格式.因此,如果在属性文件中含有其他编码格式的字符,如GBK,Java仍然会按着ISO8859-1编码格式来解释这些字符(如果遇到以"u开头的字符,就会按着UCS-2编码格式处理),所以就会出现图1所示的显示效果.
解决这个问题的方法也很简单,在JDK中提供了一个native2ascii.exe命令(在<JDK安装目录>"bin目录中),这个命令用来将属性文件中的非ISO8859-1格式的字符转换成uxxxx格式的UCS-2编码格式.如按GBK编码的"用户"就会被转换成UCS-2编码格式的"u7528u6237".
我们可以使用如下的命令转换ErrorDescription.properties文件的编码格式:
<JDK安装目录>binnative2asciiErrorDescription.properties ErrorDescription.properties
使用上面的命令将覆盖旧的ErrorDescription.properties文件,如果读者想保留旧的属性文件,可以将native2ascii.exe的第二个命令行参数换成其他的文件名,如下面命令所示:
<JDK安装目录>binnative2asciiErrorDescription.properties newDescription.properties
下面的内容显示了ErrorDescription.properties文件被转换了编码格式后的内容:
被转换了编码格式后的ErrorDescription.properties
error.user.blank =u7528u6237u540du4e0du80fdu4e3au7a7a.
error.password.blank =u5bc6u7801u4e0du80fdu4e3au7a7a.
error.password1.confirmation =u5bc6u7801u4e0du5339u914d.
error.email.blank = Emailu4e0du80fdu4e3au7a7a
error.email.invalid =u4e0du662fu4e00u4e2au6b63u786eu7684emailu5730u5740
按着上面所述的方式运行程序(需要重启Tomcat或重新发布samples程序,以便对属性文件的修改生效),就会得到如图2所示的显示效果.
图2