最近用Eclipse在开发Jira的插件,一直被中文显示乱码的问题困扰着。经过摸索,还有借助google强大的搜索找到了一堆相关的资料,终于把这个问题解决了。现在把这个过程整理下,作为备忘,也供需要解决类似问题的人作为参考。
问题的最初:在Eclipse里的工程里new了一个ResourceBundle类型的XXXXXX.properties文件。在这个文件做类似的定义:report.daily.pdt.projectid.name = 项目,保存时却出现错误提示:some character cannot be mapped using “ISO-8859-1” character encoding的提示,如下图:
有人建议使用eclipse的jinto插件编辑,会自动调用java的native2ascii把文件转码,但是我没有试验。
我尝试的解决方法1:
1. 右键点击该所在项目,点击properties;
2. 在出现的界面选择info;
3. 更改里面的Text File Encoding,选择Other:UTF-8,点击确定。
再尝试保存.properties文件,发现还是不能解决问题。
我尝试的解决方法2:
1. 菜单WindowèPreference..;
2. 在”type filter text”框里输入“content types”(中文版是:工作台èContent Types);
3. 输入完毕,eclipse会自动进行查找,查找到后会在右边显示出”Content Type”的属性;
4. 点击右边的Text,选择Java Properties Fils,设置以下两个选项:
<1>在Content types找到需要的文件类型: *properties(locked),选中后会显示在File associations一栏里;
<2>这时可以看到该类型文件的Default encoding是ISO-8859-1,把它删掉,改为:UTF-8,然点击update,再点击确定。
再尝试保存.properties文件,发现可以保存写有中文文字的属性文件。
但是将该工程打包,运行,发现XXXX.properties里的中文文字显示在页面后,竟然都是乱码。
真是郁闷~
继续Google学习。。。
我们用API操作properties文件,如果获取的属性值是中文,为什么会出现乱码呢?
如果编码(输出)和解码(读入)用的encoding不一致的有可能会引起中文乱码问题。
1. 假设如果我们创建properties文件用的encoding是GBK,我们写入了中文
2. Properties文件默认机制是采用ISO8859-1处理
3. 我们用Properties.getProperty(String key)接口读取内容,这是时候得到的是乱码。因为想用ISO8859-1对GBK编码的内容进行解码
4. 我们把用Properties.getProperty(String key)接口读取内容转换为创建properties文件时用的encoding(GBK)就可解决问题了
5. 【代码示例】
1 public class PropertiesUtil {
2 /**
3 * util class
4 */
5 private PropertiesUtil() {}
6
7 /**
8 * 指定编码获取properties文件中的属性值(解决中文乱码问题)
9 *
10 * @param properties java.util.Properties
11 * @param key 属性key
12 * @return
13 */
14 public static String getProperty(Properties properties, String key, String encoding) throws UnsupportedEncodingException {
15 //param check
16 if (properties == null)
17 return null;
18
19 //如果此时value是中文,则应该是乱码
20 String value = properties.getProperty(key);
21 if (value == null)
22 return null;
23
24 //编码转换,从ISO8859-1转向指定编码
25 value = new String(value.getBytes("ISO8859-1"), encoding);
26 return value;
27 }
28 }
如果你的应用创建中使用的系统默认编码,则如下转化:
PropertiesUtil.getProperty(properties, "TestKey", System.getProperty("file.encoding"));
这种方法依然不够“友好”,我没有尝试。
继续学习。。。。
要想在.properties里正确存储中文字符,有两种方法:
1. 用java里自带的工具:”native2ascii”.
用法:在CMD里打入”native2ascii”后回车,接着再输入中文,就可以显示出ascii码。
然后把这些ascii码复制到.properties相应的文件里就可以了。
这个方法,我试了,真的管用,就是很麻烦而且再次修改时将特别不直观。
相当也可以把写好的整个文件一起转化为ascii的文件。
ü 在你的ApplicationResources.properties文件目录里新建一个a.txt文件
ü 打开cmd
ü 输入native2ascii
ü 进入到ApplicationResources.properties文件所在目录
ü 运行: native2ascii a.txt ApplicationResources.properties
这样就可以得到a.txt文件里中文的Unicode码文件----ApplicationResources_new.properties。也就是说你可以直接在a.txt里写入,修改中文,然后在如上编辑一次a.txt文件,即可在ApplicationResources_new.properties文件中一次性写入中文的Unicode码。
还可以运用 native2ascii -encoding gb2312 命令还能将其转换为其他字符格式。
2. 下载插件,在输入中文字符时就能自己转化了。
这里比较流行有三款插件:
ü PropertiesEditor:
http://propedit.sourceforge.jp/index_en.html
ü com.lifesting.peditor_1.0.0:
http://www.blog.java.net/files/lifesting/com.lifesting.peditor_1.0.0.zip
ü ResourceBundleEditor----com.essiembre.eclipse.i18n.resourcebundle_0.7.7
http://sourceforge.net/projects/eclipse-rbe/
(一) PropertiesEditor: Eclipse内置一个properties editor,但只支持latin-1编码,调用native2ascii太麻烦,在sourceforge上有一个很强大的propeties editor,日本人写的,也支持中文,版本比较老大,3.1,还有很多没有多大用处的swing, jbuild支持等。
所以这个插件我就没有试了。
(二) peditor:这是网友根据1). PropertiesEditor修改的最小化编辑器,下载后改后缀后zip为jar,然后放在eclipse/plugins目录下,重新启动eclipse.
点击菜单Window——preferences——General——Editors——File Associations,在下拉列表中选择*.properties,执行文件关联。如下图所示:
ApplicationResources.properties,右键点击,选择打开方式,会出现刚加载编辑器,如下图所示:
输入如下图:
则会自动转化为如下图:
保存,打包试验,这次能正确显示中文了,而且感觉还挺方便的。
(三) ResourceBundleEditor
这个的编辑界面会更友好,是以树节点的形式提供编辑的,配置方法跟peditor,就不再重复了。
打开后,可以看到如下界面:
这个方法也可以正确显示中文。
好了,以上介绍的各种插件及方法任君选择。