Welcome 微信登录

首页 / 软件开发 / JAVA / Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道

Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道2011-01-10 BlogJava 银河使者一、使用native2ascii命令使资源文件支持中文

从上篇文章中的ErrorDescription.properties文件中可以看到所有的错误提示信息都是英文的。在客户端显示这些英文信息没有任何问题。但如果将这些英文错误提示信息改成相应的中错误提示信息又会如何呢?

在修改之前,先让我们选中ErrorDescription.properties文件,单击右键,在右键菜单中选择【Properties】菜单项,打开属性设置对话框,在右侧所列的项目中选择【Resource】。看一下右下角的“Text file encoding”的编码格式,如果编码格式不是UTF-8或GBK(也包括GB2312、GB18030),请将编码格式修改为UTF-8或GBK,否则无法使用MyEclipse的属性编辑器输入中文。在设置完属性文件的编码格式后,将ErrorDescription.properties文件的内容按着该文件的英文版所示修改成中文提示信息。

中文版的ErrorDescription.properties

error.user.blank=用户名不能为空.

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在处理属性文件时,只能处理ISO 8859-1(也称为latin-1或“西欧语言”)或UCS-2(uxxxx格式)编码格式。因此,如果在属性文件中含有其他编码格式的字符,如GBK,Java仍然会按着ISO 8859-1编码格式来解释这些字符(如果遇到以"u开头的字符,就会按着UCS-2编码格式处理),所以就会出现图1所示的显示效果。