读书人

Eclipse.Properties中文乱码有关问题解

发布时间: 2012-10-07 17:28:51 作者: rapoo

Eclipse.Properties中文乱码问题解决
最近用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,就不再重复了。




打开后,可以看到如下界面:






这个方法也可以正确显示中文。

好了,以上介绍的各种插件及方法任君选择。

读书人网 >Eclipse开发

热点推荐