Live a simple life

沉默(zhu_xing@live.cn)
随笔 - 48, 文章 - 0, 评论 - 132, 引用 - 0
数据加载中……

【Java】properties中文乱码问题

        上周五下午,处理一个bug的时候就碰到这种鬼事情了,虽然原来脑子中有印象而且肯定也处理过,但就是想不起来了,试了半个小时才想起来properties的内在机制默认是用ISO8859-1 encoding进行处理的(当时网络坏了,没法上网查,能想到的encoding基本上都实现了...)。写一下,遇到的哥们就不在麻烦了(最讨厌这种乱七八糟的问题了~_~)
    
        【原理解释】
           我们用API操作properties文件,如果获取的属性值是中文,为什么会出现乱码呢?

            我们知道,如果编码(输出)和解码(读入)用的encoding是不一致的有可能会引起中文乱码问题,如果这两种encoding冲突,则你基本上就中奖了。看两个我们熟悉的eclipse提示:
            
            
            
            
           1、假设如果我们创建properties文件用的encoding是GBK,我们写入了中文
           2、Properties文件默认机制是采用ISO8859-1处理
           3、我们用Properties.getProperty(String key)接口读取内容,这是时候得到的是乱码。因为想用ISO8859-1对GBK编码的内容进行解码
           4、我们把用Properties.getProperty(String key)接口读取内容转换为创建properties文件时用的encoding(GBK)不就解决问题了


        【代码示例】 
 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"));

            PS:java中文乱码的问题会遇到不少,尤其是用字符流的时候。老早之前和乱码做过斗争,经验是要搞清楚产生乱码的基本原理,然后再修理它

本博客中的所有文章、随笔除了标题中含有引用或者转载字样的,其他均为原创。转载请注明出处,谢谢!

posted on 2008-09-01 14:51 zhuxing 阅读(11538) 评论(8)  编辑  收藏 所属分类: Java

评论

# re: 【Java】properties中文乱码问题  回复  更多评论   

难道博主没有听说过PropertiesEditor插件?
2008-09-01 15:04 | Jacky-Q

# re: 【Java】properties中文乱码问题  回复  更多评论   

听说过,而且还定制过它的源码
2008-09-01 15:06 | zhuxing

# re: 【Java】properties中文乱码问题  回复  更多评论   

properties里面最好不要直接写中文吧~~~用nativa2ascii先转一下啊~
2008-09-01 16:01 | popoer

# re: 【Java】properties中文乱码问题  回复  更多评论   

@popoer
挺美好的想法
2008-09-01 16:04 | zhuxing

# re: 【Java】properties中文乱码问题  回复  更多评论   

很好,已经解决了!
2011-11-21 10:50 | 梁玉龙

# re: 【Java】properties中文乱码问题  回复  更多评论   

不错,解决了问题
2012-03-20 13:53 | liveimain

# re: 【Java】properties中文乱码问题  回复  更多评论   

很好
2012-05-18 12:42 | spark360

# re: 【Java】properties中文乱码问题  回复  更多评论   

理解了这个原理,Properties文件编码没有变,在解析类中的参数就给它搞成UTF-8的,就可以了。
2012-05-18 12:44 | spark360

只有注册用户登录后才能发表评论。


网站导航: