MenuItem 顯示中文亂碼問題的解決方案

第一次嘗試給java程序添加系統托盤圖標(TrayIcon),發現菜單顯示中文爲亂碼,一個個小方框,後來在網上找到一位網友的文章《 MenuItem 顯示中文亂碼問題解決方案》,按照裏面的思路解決了。

引用文章裏「問題的緣由」:
1. 本地系統區域語言字符集的問題,咱們的系統可能默認的字符集爲GB2312或GBK。
 
2. Java源文件編碼字符的問題,若是使用eclipse能夠查看一下java source文件的編碼方式。
 
3. javac編譯時的字符問題,這一個問題很容易被忽略,運行一下javac能夠看到有一個encoding的參數能夠設置----這一個很重要。
 
4. 要讀取文件的編碼和讀取時的字符集設置問題,若是咱們要用的字符串不是硬編碼在java源碼中,而是從資源文件中讀取時,就要注意這個問題了。

解決方法呢:
第一種狀況,本地系統的語言字符,咱們管不了;

第二種狀況,轉換一下文件的編碼就行了;

第三種狀況,當咱們檢查肯定Java源文件編碼字符是UTF-8,對javac編譯時的參數設置,增長encoding參數,如:javac -encoding utf8 Test.java
    但在Eclipse沒找到相關的設置,只好有如下方法:
    1.手工編譯使用到MenuItem的類,目前只發現java.awt包會存在這個問題,swing包能很好的解決這種字符集變換的問題。

    2.使用其它編譯方式,如ant、Maven,它們都能配置javac。先給出網友文章給出的Maven例子:
< build >    
         < plugins >    
                 < plugin >    
                         < groupId >org.apache.maven.plugins </ groupId >    
                         < artifactId >maven-compiler-plugin </ artifactId >    
                         < version >2.3.2 </ version >    
                         < configuration >    
                                 < source >1.6 </ source >    
                                 < target >1.6 </ target >    
                                 < encoding >utf8 </ encoding >    
                         </ configuration >    
                 </ plugin >    
                                            ....

而我用Ant的:
< target name ="compile" depends ="copyfiles" >
         < javac srcdir ="${sourcedir}"
                     destdir ="${targetdir}"
                     encoding ="UTF-8"
                     target ="1.6"
                     classpathref ="libraries" />
</ target >

4. 要讀取的文件的字符編碼和讀取流編碼,對一個資源文件,咱們也要設置其編碼爲utf8(參照第2條,跟設置java源文件編碼是同樣的),同時在使用流讀取時也要設置流的讀取編碼(這個網上說java字符流的默認的是jvm的編碼,跟系統字符集一致)。

讀取流代碼以下:
BufferedReader br = new BufferedReader( new InputStreamReader( new FileInputStream(langFile), "utf8"));

這裏還要注意的是:在複製這個資源文件時,最好也設置一下編碼,如用ant複製時:
< echo message ="copy conf" />    
< copy file ="D:\klaudisk-client\conf\settings.ini"    
         tofile ="D:\klaudisk-client\target\conf\settings.ini" overwrite ="true" encoding ="utf8" />

還能夠使用Properties.load()方法來加載.properties文件(該文件是被java bin下的navie2asc程序處理過的文件),這樣就不用管第4點問題了。

個人問題是第3種狀況,使用Ant來編譯生成jar,解決了!
相關文章
相關標籤/搜索