【转】Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/14/251244.html
资源文件不仅仅需要保存英文信息,在很多时候,也需要保存其他的语言信息,如中文信息。但Java的属性文件只支持英文,要想在属性文件中保存中文,需要使用"uxxxx格式,但这非常不方便,因此,本文将分别介绍如何使用native2ascii.exe和Eclipse插件的方式来解决这个问题。
一、使用native2ascii命令使资源文件支持中文
从上篇文章中的ErrorDescription.properties文件中可以看到所有的错误提示信息都是英文的。在客户端显示这些英文信息没有任何问题。但如果将这些英文错误提示信息改成相应的中错误提示信息又会如何呢?
在修改之前,先让我们选中ErrorDescription.properties文件,单击右键,在右键菜单中选择【Properties】菜单项,打开属性设置对话框,在右侧所列的项目中选择【Resource】。看一下右下角的“Text file encoding”的编码格式,如果编码格式不是UTF-8或GBK(也包括GB2312、GB18030),请将编码格式修改为UTF-8或GBK,否则无法使用MyEclipse的属性编辑器输入中文。在设置完属性文件的编码格式后,将ErrorDescription.properties文件的内容按着该文件的英文版所示修改成中文提示信息。
中文版的ErrorDescription.properties
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所示的显示效果。
解决这个问题的方法也很简单,在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.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内嵌的属性编辑器类似。在下载插件压缩包后,将其解压,将features和plugins两个目录复制到<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
这两个插件都可以很好的满足编辑属性文件的需要,而且基本功能相同。读者可以根据自己的喜好选择使用其中的任何一个插件来编辑属性文件。
【转】Struts1.x系列教程(3):属性(资源)文件乱码问题的解决之道的更多相关文章
- 【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】
一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 package com.kdyzm ...
- struts2官方 中文教程 系列七:消息资源文件
介绍 在本教程中,我们将探索使用Struts 2消息资源功能(也称为 resource bundles 资源绑定).消息资源提供了一种简单的方法,可以将文本放在一个视图页面中,通过应用程序,创建表单字 ...
- webpack4 系列教程(十一):字体文件处理
教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步<webpack4 系列教程(十一):字体文件处理>原文地址.或者来我的小站看更多内容:godbmw.com 0. 课程介 ...
- [转]Struts1.x系列教程(1):用MyEclipse开发第一个Struts程序
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/13/251101.html 本系列教程将详细介绍Struts 1.x的基本原理和使用方法, ...
- 【转】Struts1.x系列教程(2):简单的数据验证
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/13/251197.html 简单验证从本质上说就是在服务端 ...
- 【转】Struts1.x系列教程(7):Logic标签库
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- 【转】Struts1.x系列教程(6):Bean标签库
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- 【转】Struts1.x系列教程(4):标签库概述与安装
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
- 【转】Struts1.x系列教程(5):HTML标签库
转载地址:http://www.blogjava.net/nokiaguy/archive/2009/01/archive/2009/01/archive/2009/01/archive/2009/0 ...
随机推荐
- bzoj4514: [Sdoi2016]数字配对--费用流
看了一眼题目&数据范围,觉得应该是带下界的费用流 原来想拆点变成二分图,能配对的连边,跑二分图,可行性未知 后来看到另外一种解法.. 符合匹配要求的数要满足:质因子的个数相差为1,且两者可整除 ...
- 支付宝APP支付之Java后台生成签名具体步骤
/** *支付宝支付 * @param orderId 订单编号 * @param actualPay 实际支付金额 * @return */ private String getOrderInfoB ...
- 在 Django 模板中遍历复杂数据结构的关键是句点字符
在 Django 模板中遍历复杂数据结构的关键是句点字符 ( . ). 实例二 mysit/templates/myhtml2.html修改如下 <!DOCTYPE html> <h ...
- Shell 之外 试试不操作 shell 来实现同样的效果
执行程序时发生了什么当你双击桌面上的终端程序图标时,就会打开一个载入shell的程序. 你键入的命令不会直接在内核执行,而是先和 shell 进行交互.Command (eg. `ls -l')↓Te ...
- Python一般错误
1. IndentationError: unindent does not match any outer indentation level 格式对齐的问题.Python对空格和Tab有严格区别
- php课程---php使用PDO方法详解(转)
本文详细分析了php使用PDO方法.分享给大家供大家参考.具体分析如下: PDO::exec:返回的是int类型,表示影响结果的条数. 代码如下: PDOStatement::execute 返回的是 ...
- 关于 calloc 函数使用 与fun 函数
s=(float *) calloc (1,sizeof(float)); #include "stdio.h"#include "stdlib.h"void ...
- mango-1.4.1 文档
文档目录 快速开始 添加依赖包 数据库准备 创建HelloWorld类 书写插入与查询方法 构造数据源并初始化mango对象 获取dao并调用插入与查询方法 查看完整示例代码和表结构 基本操作 准备工 ...
- C# 拷贝数组的几种方法
已知数组如下: int[] array = { 1, 5, 9, 3, 7, 2, 8 ,6, 4}; (1).引用复制,易引起错误,不推荐 int[] copy = array; (2).遍历拷贝 ...
- Laravel-5.1 ---- 将mews captcha整合到项目中!
经过摸索,终于能在laravel 5.1中应用验证码了. 因为英语渣五水平,所以几乎没搜索到什么有用的,于是考虑在github上搜索验证码包! 提示: github上的package中往往会有使用说明 ...