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

简介: 本文为原创,如需转载,请注明作者和出处,谢谢!     资源文件不仅仅需要保存英文信息,在很多时候,也需要保存其他的语言信息,如中文信息。但Java的属性文件只支持英文,要想在属性文件中保存中文,需要使用"uxxxx格式,但这非常不方便,因此,本文将分别介绍如何使用native2ascii.exe和Eclipse插件的方式来解决这个问题。

本文为原创,如需转载,请注明作者和出处,谢谢!

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

一、使用native2ascii命令使资源文件支持中文
    从上篇文章中的ErrorDescription.properties文件中可以看到所有的错误提示信息都是英文的。在客户端显示这些英文信息没有任何问题。但如果将这些英文错误提示信息改成相应的中错误提示信息又会如何呢?
   
在修改之前,先让我们选中ErrorDescription.properties文件,单击右键,在右键菜单中选择【Properties】菜单项,打开属性设置对话框,在右侧所列的项目中选择【Resource】。看一下右下角的“Text file encoding”的编码格式,如果编码格式不是UTF-8GBK(也包括GB2312GB18030),请将编码格式修改为UTF-8GBK,否则无法使用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-8GBK了,而且所输入的中文在MyEclipse中也能正常显示,并且页面中的设置的编码格式也和属性文件中的编码格式一致,那么为什么会输出乱码呢?
   
产生这个问题的原因要从Java对各种类型的文件的处理方式上说起。Java在处理*.java文件时,无论*.java文件的编码格式是UTF-8还是GBK。在使用javac.exe编译时,都会将其转换成UCS-2编码格式。因此,*.java文件就不会出现乱码。而Java在处理属性文件时,只能处理ISO 8859-1(也称为latin-1或“西欧语言”)UCS-2/uxxxx格式)编码格式。因此,如果在属性文件中含有其他编码格式的字符,如GBKJava仍然会按着ISO 8859-1编码格式来解释这些字符(如果遇到以"u开头的字符,就会按着UCS-2编码格式处理),所以就会出现图1所示的显示效果。
    解决这个问题的方法也很简单,在
JDK中提供了一个native2ascii.exe命令(在<JDK安装目录>"bin目录中),这个命令用来将属性文件中的非ISO 8859-1格式的字符转换成/uxxxx格式的UCS-2编码格式。如按GBK编码的“用户”就会被转换成UCS-2编码格式的“/u7528/u6237
   
我们可以使用如下的命令转换ErrorDescription.properties文件的编码格式:

    <JDK
安装目录>/bin/native2ascii ErrorDescription.properties ErrorDescription.properties


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

    <JDK
安装目录>/bin/native2ascii ErrorDescription.properties newDescription.properties

下面的内容显示了ErrorDescription.properties文件被转换了编码格式后的内容:

被转换了编码格式后的ErrorDescription.properties

error.user.blank  =  /u7528/u6237/u540d/u4e0d/u80fd/u4e3a/u7a7a.
error.password.blank 
=  /u5bc6/u7801/u4e0d/u80fd/u4e3a/u7a7a.
error.password1.confirmation 
=  /u5bc6/u7801/u4e0d/u5339/u914d.
error.email.blank 
=  Email/u4e0d/u80fd/u4e3a/u7a7a
error.email.invalid 
=  /u4e0d/u662f/u4e00/u4e2a/u6b63/u786e/u7684email/u5730/u5740

 

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



图2
二、使用 Eclipse 插件编辑属性文件


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

1. Properties Editor
插件

    这个插件可以从http://sourceforge.jp/projects/propedit/下载。它分为三个版本:独立运行的版本、JBuilder版本和Eclipse版本。

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



图3

2. JInto插件


    这个插件可以从http://www.guh-software.de/jinto.html下载。它的基本功能和Properties Editor插件类似,只是以表格形式编辑属性文件,如图4所示。



图4

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



图5

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

目录
相关文章
|
8月前
|
JSON Java 应用服务中间件
JavaWeb项目之乱码问题及如何解决
JavaWeb项目之乱码问题及如何解决
|
5月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
167 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
5月前
|
Java 开发者 JavaScript
Struts 2 开发者的秘籍:隐藏的表单标签库功能,能否成为你下个项目的大杀器?
【8月更文挑战第31天】Struts 2表单标签库是提升Web页面交互体验的神器。它提供丰富的标签,如`&lt;s:textfield&gt;`和`&lt;s:select&gt;`,简化表单元素创建与管理,支持数据验证和动态选项展示。结合示例代码,如创建文本输入框并与Action类属性绑定,显著提升开发效率和用户体验。通过自定义按钮样式等功能,Struts 2表单标签库让开发者更专注于业务逻辑实现。
59 0
干掉 BeanUtils!试试这款 Bean 自动映射工具,真心强大
平时做项目的时候,经常需要做PO、VO、DTO之间的转换。简单的对象转换,使用BeanUtils基本上是够了,但是复杂的转换,如果使用它的话又得写一堆Getter、Setter方法了。今天给大家推荐一款对象自动映射工具MapStruct,功能真心强大!
|
SQL Java 关系型数据库
JavaWeb常用工具类以及Jar包总结(后续不断补充)
JavaWeb常用工具类以及Jar包总结(后续不断补充)
|
前端开发 JavaScript Java
WEB核心【response对象(重点),案例:读取WEB工程资源文件】第十一章
本章:主要介绍response对象详情,案例SE 和 EE 读取web工程的资源文件
WEB核心【response对象(重点),案例:读取WEB工程资源文件】第十一章
|
安全 搜索推荐 Java
干掉 BeanUtils!试试这款 Bean 自动映射工具,真心强大!!
服务通过接口对外提供数据,或者服务之间进行数据交互,首先查询数据库并映射成数据对象(XxxDO)。 正常情况下,接口是不允许直接以数据库数据对象 XxxDO 形式对外提供数据的,而是要再封装成数据传输对象(XxxDTO)提供出去。
干掉 BeanUtils!试试这款 Bean 自动映射工具,真心强大!!
|
XML 存储 JavaScript
(0基础)学习XML的第二课:用途
  XML 应用于 web 开发的许多方面,常用于简化数据的存储和共享。   XML 把数据从 HTML 分离   如果你需要在 HTML 文档中显示动态数据,那么每当数据改变时将花费大量的时间来编辑 HTML。   通过 XML,数据能够存储在独立的 XML 文件中。这样你就可以专注于使用 HTML 进行布局和显示,并确保修改底层数据不再需要对 HTML 进行任何的改变。
154 0
|
XML Web App开发 安全
(0基础)学习XML的第七课:验证器
  XML 验证器XML 验证XML 浏览器XML 错误会终止您的程序   XML 文档中的错误会终止你的 XML 程序。   W3C 的 XML 规范声明:如果 XML 文档存在错误,那么程序就不应当继续处理这个文档。理由是,XML 软件应当轻巧,快速,具有良好的兼容性。   如果使用 HTML,创建包含大量错误的文档是有可能的(比如你忘记了结束标签)。其中一个主要的原因是 HTML 浏览器相当臃肿,兼容性也很差,并且它们有自己的方式来确定当发现错误时文档应该显示为什么样子。
121 0
|
程序员
JavaWeb学习之路(4)--开发第一个网页,注意文件类型与文件拓展名
本文目录 1. 文件类型 2. 隐藏拓展名 3. 网页的拓展名 4. 网页的打开方式 5. 小结
145 0