熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Struts1.x系列教程(3):屬性(資源)文件亂碼問題的解決之道

2013-11-23 20:29:02  來源: Java開源技術 

  資源文件不僅僅需要保存英文信息在很多時候也需要保存其他的語言信息如中文信息但Java的屬性文件只支持英文要想在屬性文件中保存中文需要使用uxxxx格式但這非常不方便因此本文將分別介紹如何使用nativeasciiexe和Eclipse插件的方式來解決這個問題

  使用nativeascii命令使資源文件支持中文

  從上篇文章中的ErrorDescriptionproperties文件中可以看到所有的錯誤提示信息都是英文的在客戶端顯示這些英文信息沒有任何問題但如果將這些英文錯誤提示信息改成相應的中錯誤提示信息又會如何呢?

  在修改之前先讓我們選中ErrorDescriptionproperties文件單擊右鍵在右鍵菜單中選擇「Properties」菜單項打開屬性設置對話框在右側所列的項目中選擇「Resource」看一下右下角的Text file encoding的編碼格式如果編碼格式不是UTF或GBK(也包括GBGB請將編碼格式修改為UTF或GBK否則無法使用MyEclipse的屬性編輯器輸入中文在設置完屬性文件的編碼格式後將ErrorDescriptionproperties文件的內容按著該文件的英文版所示修改成中文提示信息

  中文版的ErrorDescriptionproperties

  

  erroruserblank = 用戶名不能為空
  errorpasswordblank = 密碼不能為空
  nfirmation = 密碼不匹配
  erroremailblank = Email不能為空
  erroremailinvalid = 不是一個正確的email地址

  重新啟動Tomcat後在IE中輸入如下的URL

  

  當出現信息輸入界面後點擊提交按鈕將會顯示如圖的效果

  

  圖

  也許很多讀者會感到奇怪我們已經將屬性文件的編碼格式修改為UTF或GBK了而且所輸入的中文在MyEclipse中也能正常顯示並且頁面中的設置的編碼格式也和屬性文件中的編碼格式一致那麼為什麼會輸出亂碼呢?

  產生這個問題的原因要從Java對各種類型的文件的處理方式上說起Java在處理*java文件時無論*java文件的編碼格式是UTF還是GBK在使用javacexe編譯時都會將其轉換成UCS編碼格式因此*java文件就不會出現亂碼而Java在處理屬性文件時只能處理ISO (也稱為latin西歐語言)或UCS(\uxxxx格式)編碼格式因此如果在屬性文件中含有其他編碼格式的字符如GBKJava仍然會按著ISO 編碼格式來解釋這些字符(如果遇到以u開頭的字符就會按著UCS編碼格式處理)所以就會出現圖所示的顯示效果

  解決這個問題的方法也很簡單在JDK中提供了一個nativeasciiexe命令(在<JDK安裝目錄>bin目錄中)這個命令用來將屬性文件中的非ISO 格式的字符轉換成\uxxxx格式的UCS編碼格式如按GBK編碼的用戶就會被轉換成UCS編碼格式的\u\u

  我們可以使用如下的命令轉換ErrorDescriptionproperties文件的編碼格式

  <JDK安裝目錄>\bin\nativeascii ErrorDescriptionproperties ErrorDescriptionproperties

  使用上面的命令將覆蓋舊的ErrorDescriptionproperties文件如果讀者想保留舊的屬性文件可以將nativeasciiexe的第二個命令行參數換成其他的文件名如下面命令所示

  <JDK安裝目錄>\bin\nativeascii ErrorDescriptionproperties newDescriptionproperties

  下面的內容顯示了ErrorDescriptionproperties文件被轉換了編碼格式後的內容

  被轉換了編碼格式後的ErrorDescriptionproperties

  

  erroruserblank = \u\u\ud\ued\ufd\uea\uaa
errorpasswordblank = \ubc\u\ued\ufd\uea\uaa
nfirmation = \ubc\u\ued\u\ud
erroremailblank = Email\ued\ufd\uea\uaa
erroremailinvalid = \ued\uf\ue\uea\ub\ue\uemail\u\u

  按著上面所述的方式運行程序(需要重啟Tomcat或重新發布samples程序以便對屬性文件的修改生效)就會得到如圖所示的顯示效果

  

  使用Eclipse插件編輯屬性文件

  雖然上面的方法可以很好的解決Java屬性文件的亂碼問題但是這種方式並不方便因此每次修改屬性文件後都要使用nativeasciiexe命令對被修改的屬性文件進行編碼轉換在本節將介紹兩個專門用來編輯Java屬性文件的Eclipse插件通過使用這兩個插件可以無需使用nativeasciiexe命令就可以很好地處理非ISO 編碼格式的字符

   Properties Editor插件

  這個插件可以從下載它分為三個版本獨立運行的版本JBuilder版本和Eclipse版本

  這個插件在編輯屬性文件時的方式和Eclipse內嵌的屬性編輯器類似在下載插件壓縮包後將其解壓將features和plugins兩個目錄復制到<MyEclipse安裝目錄>eclipse目錄中即可用Properties Editor插件編輯屬性文件的界面如圖所示

  

   JInto插件

  這個插件可以從下載它的基本功能和Properties Editor插件類似只是以表格形式編輯屬性文件如圖所示

  

  圖

  在使用上述兩個插件編輯完ErrorDescriptionproperties文件並保存後再使用Eclipse內嵌的屬性編輯器打開這個文件(選中屬性文件後通過「Open With」選擇相應的屬性文件編輯器如圖所示)就會看到uxxxx格式的內容

  

  這兩個插件都可以很好的滿足編輯屬性文件的需要而且基本功能相同讀者可以根據自己的喜好選擇使用其中的任何一個插件來編輯屬性文件


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28551.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.