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,.net,swing,Google,Blog)