java

位置:IT落伍者 >> java >> 浏览文章

Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道


发布日期:2023年03月02日
 
Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道

资源文件不仅仅需要保存英文信息在很多时候也需要保存其他的语言信息如中文信息但Java的属性文件只支持英文要想在属性文件中保存中文需要使用uxxxx格式但这非常不方便因此本文将分别介绍如何使用nativeasciiexe和Eclipse插件的方式来解决这个问题

使用nativeascii命令使资源文件支持中文

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

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

中文版的ErrorDescriptionproperties

erroruserblank=用户名不能为空

errorpasswordblank=密码不能为空

nfirmation=密码不匹配

erroremailblank=Email不能为空

erroremailinvalid=不是一个正确的email地址

重新启动Tomcat后在IE中输入如下的URL

当出现信息输入界面后点击提交按钮将会显示如图的效果

也许很多读者会感到奇怪我们已经将属性文件的编码格式修改为UTF或GBK了而且所输入的中文在MyEclipse中也能正常显示并且页面中的设置的编码格式也和属性文件中的编码格式一致那么为什么会输出乱码呢?

产生这个问题的原因要从Java对各种类型的文件的处理方式上说起Java在处理*java文件时无论*java文件的编码格式是UTF还是GBK在使用javacexe编译时都会将其转换成UCS编码格式因此*java文件就不会出现乱码而Java在处理属性文件时只能处理ISO (也称为latin西欧语言)或UCS(\uxxxx格式)编码格式因此如果在属性文件中含有其他编码格式的字符如GBKJava仍然会按着ISO 编码格式来解释这些字符(如果遇到以u开头的字符就会按着UCS编码格式处理)所以就会出现图所示的显示效果

解决这个问题的方法也很简单在JDK中提供了一个nativeasciiexe命令(在<JDK安装目录>bin目录中)这个命令用来将属性文件中的非ISO 格式的字符转换成\uxxxx格式的UCS编码格式如按GBK编码的用户就会被转换成UCS编码格式的\u\u

我们可以使用如下的命令转换ErrorDescriptionproperties文件的编码格式

<JDK安装目录>\bin\nativeascii ErrorDescriptionproperties ErrorDescriptionproperties

使用上面的命令将覆盖旧的ErrorDescriptionproperties文件如果读者想保留旧的属性文件可以将nativeasciiexe的第二个命令行参数换成其他的文件名如下面命令所示

<JDK安装目录>\bin\nativeascii ErrorDescriptionproperties newDescriptionproperties

下面的内容显示了ErrorDescriptionproperties文件被转换了编码格式后的内容

被转换了编码格式后的ErrorDescriptionproperties

erroruserblank=\u\u\ud\ued\ufd\uea\uaa

errorpasswordblank=\ubc\u\ued\ufd\uea\uaa

nfirmation=\ubc\u\ued\u\ud

erroremailblank=Email\ued\ufd\uea\uaa

erroremailinvalid=\ued\uf\ue\uea\ub\ue\uemail\u\u

按着上面所述的方式运行程序(需要重启Tomcat或重新发布samples程序以便对属性文件的修改生效)就会得到如图所示的显示效果

使用Eclipse插件编辑属性文件

虽然上面的方法可以很好的解决Java属性文件的乱码问题但是这种方式并不方便因此每次修改属性文件后都要使用nativeasciiexe命令对被修改的属性文件进行编码转换在本节将介绍两个专门用来编辑Java属性文件的Eclipse插件通过使用这两个插件可以无需使用nativeasciiexe命令就可以很好地处理非ISO 编码格式的字符

Properties Editor插件

这个插件可以从下载它分为三个版本独立运行的版本JBuilder版本和Eclipse版本

这个插件在编辑属性文件时的方式和Eclipse内嵌的属性编辑器类似在下载插件压缩包后将其解压将features和plugins两个目录复制到<MyEclipse安装目录>eclipse目录中即可用Properties Editor插件编辑属性文件的界面如图所示

JInto插件

这个插件可以从下载它的基本功能和Properties Editor插件类似只是以表格形式编辑属性文件如图所示

在使用上述两个插件编辑完ErrorDescriptionproperties文件并保存后再使用Eclipse内嵌的属性编辑器打开这个文件(选中属性文件后通过「Open With」选择相应的属性文件编辑器如图所示)就会看到uxxxx格式的内容

这两个插件都可以很好的满足编辑属性文件的需要而且基本功能相同读者可以根据自己的喜好选择使用其中的任何一个插件来编辑属性文件

上一篇:Struts2基于注解的Action配置

下一篇:Eclipse开发经典教程:展现组件