<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Live a simple life

    沉默(zhu_xing@live.cn)
    隨筆 - 48, 文章 - 0, 評論 - 132, 引用 - 0
    數(shù)據(jù)加載中……

    【Java】properties中文亂碼問題

            上周五下午,處理一個bug的時候就碰到這種鬼事情了,雖然原來腦子中有印象而且肯定也處理過,但就是想不起來了,試了半個小時才想起來properties的內(nèi)在機制默認是用ISO8859-1 encoding進行處理的(當(dāng)時網(wǎng)絡(luò)壞了,沒法上網(wǎng)查,能想到的encoding基本上都實現(xiàn)了...)。寫一下,遇到的哥們就不在麻煩了(最討厭這種亂七八糟的問題了~_~)
        
            【原理解釋】
               我們用API操作properties文件,如果獲取的屬性值是中文,為什么會出現(xiàn)亂碼呢?

                我們知道,如果編碼(輸出)和解碼(讀入)用的encoding是不一致的有可能會引起中文亂碼問題,如果這兩種encoding沖突,則你基本上就中獎了。看兩個我們熟悉的eclipse提示:
                
                
                
                
               1、假設(shè)如果我們創(chuàng)建properties文件用的encoding是GBK,我們寫入了中文
               2、Properties文件默認機制是采用ISO8859-1處理
               3、我們用Properties.getProperty(String key)接口讀取內(nèi)容,這是時候得到的是亂碼。因為想用ISO8859-1對GBK編碼的內(nèi)容進行解碼
               4、我們把用Properties.getProperty(String key)接口讀取內(nèi)容轉(zhuǎn)換為創(chuàng)建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是中文,則應(yīng)該是亂碼
    20         String value = properties.getProperty(key);
    21         if (value == null)
    22             return null;
    23         
    24         //編碼轉(zhuǎn)換,從ISO8859-1轉(zhuǎn)向指定編碼
    25         value = new String(value.getBytes("ISO8859-1"), encoding);
    26         return value;
    27     }
    28 }
          
                如果你的應(yīng)用創(chuàng)建中使用的系統(tǒng)默認編碼,則如下轉(zhuǎn)化:
                PropertiesUtil.getProperty(properties, "TestKey", System.getProperty("file.encoding"));

                PS:java中文亂碼的問題會遇到不少,尤其是用字符流的時候。老早之前和亂碼做過斗爭,經(jīng)驗是要搞清楚產(chǎn)生亂碼的基本原理,然后再修理它

    本博客中的所有文章、隨筆除了標(biāo)題中含有引用或者轉(zhuǎn)載字樣的,其他均為原創(chuàng)。轉(zhuǎn)載請注明出處,謝謝!

    posted on 2008-09-01 14:51 zhuxing 閱讀(11724) 評論(8)  編輯  收藏 所屬分類: Java

    評論

    # re: 【Java】properties中文亂碼問題  回復(fù)  更多評論   

    難道博主沒有聽說過PropertiesEditor插件?
    2008-09-01 15:04 | Jacky-Q

    # re: 【Java】properties中文亂碼問題  回復(fù)  更多評論   

    聽說過,而且還定制過它的源碼
    2008-09-01 15:06 | zhuxing

    # re: 【Java】properties中文亂碼問題  回復(fù)  更多評論   

    properties里面最好不要直接寫中文吧~~~用nativa2ascii先轉(zhuǎn)一下啊~
    2008-09-01 16:01 | popoer

    # re: 【Java】properties中文亂碼問題  回復(fù)  更多評論   

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

    # re: 【Java】properties中文亂碼問題  回復(fù)  更多評論   

    很好,已經(jīng)解決了!
    2011-11-21 10:50 | 梁玉龍

    # re: 【Java】properties中文亂碼問題  回復(fù)  更多評論   

    不錯,解決了問題
    2012-03-20 13:53 | liveimain

    # re: 【Java】properties中文亂碼問題  回復(fù)  更多評論   

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

    # re: 【Java】properties中文亂碼問題  回復(fù)  更多評論   

    理解了這個原理,Properties文件編碼沒有變,在解析類中的參數(shù)就給它搞成UTF-8的,就可以了。
    2012-05-18 12:44 | spark360
    主站蜘蛛池模板: 亚洲一区二区三区免费在线观看| 亚洲天然素人无码专区| 久久av免费天堂小草播放| 免费人成在线观看播放国产| av免费不卡国产观看| 久久久亚洲裙底偷窥综合| 久久久久久国产精品免费无码| 久久精品亚洲综合专区| 日韩免费无码一区二区三区| 亚洲成人免费在线| h视频在线免费看| 亚洲精品天堂在线观看| 福利免费在线观看| 国产偷国产偷亚洲清高动态图| 中文在线免费观看| 亚洲人成电影在线天堂| 国产精品成人观看视频免费| 亚洲国产精品久久人人爱| 成全高清视频免费观看| 春暖花开亚洲性无区一区二区 | 亚洲精品~无码抽插| 久久黄色免费网站| 亚洲国产综合第一精品小说| 免费爱爱的视频太爽了| h在线看免费视频网站男男| 亚洲成色999久久网站| 久久这里只有精品国产免费10| 亚洲丶国产丶欧美一区二区三区| 无码专区一va亚洲v专区在线 | 亚洲综合色在线观看亚洲| 免费看搞黄视频网站| 亚洲最大中文字幕无码网站| 免费少妇a级毛片人成网| 久久一本岛在免费线观看2020| 亚洲一卡二卡三卡四卡无卡麻豆| 全部免费毛片免费播放| 免费人妻无码不卡中文字幕系| 亚洲综合无码无在线观看| 亚洲中久无码不卡永久在线观看| 1000部禁片黄的免费看 | 东方aⅴ免费观看久久av|