程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts1.x系列教程(3):屬性(資源)文件亂碼問題的解決之道

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

編輯:關於JAVA

一、使用native2ascii命令使資源文件支持中文

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

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

中文版的ErrorDescription.properties

error.user.blank=用戶名不能為空.

error.password.blank=密碼不能為空.

error.password1.confirmation=密碼不匹配.

error.email.blank=Email不能為空

error.email.invalid=不是一個正確的email地址

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

http://localhost:8080/samples/simpleValidation.jsp

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

圖1

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

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

解決這個問題的方法也很簡單,在JDK中提供了一個native2ascii.exe命令(在<JDK安裝目錄>"bin目錄中),這個命令用來將屬性文件中的非ISO 8859-1格式的字符轉換成\uxxxx格式的UCS-2編碼格式。如按GBK編碼的“用戶”就會被轉換成UCS-2編碼格式的“\u7528\u6237”。

我們可以使用如下的命令轉換ErrorDescription.properties文件的編碼格式:

<JDK安裝目錄>\bin\native2ascii ErrorDescription.properties ErrorDescription.properties

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

<JDK安裝目錄>\bin\native2ascii ErrorDescription.properties newDescription.properties

下面的內容顯示了ErrorDescription.properties文件被轉換了編碼格式後的內容:

被轉換了編碼格式後的ErrorDescription.properties

error.user.blank = \u7528\u6237\u540d\u4e0d\u80fd\u4e3a\u7a7a.
error.password.blank = \u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a.
error.password1.confirmation = \u5bc6\u7801\u4e0d\u5339\u914d.
error.email.blank = Email\u4e0d\u80fd\u4e3a\u7a7a
error.email.invalid = \u4e0d\u662f\u4e00\u4e2a\u6b63\u786e\u7684email\u5730\u5740

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

圖2

二、使用Eclipse插件編輯屬性文件

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

1.Properties Editor插件

這個插件可以從http://sourceforge.jp/projects/propedit/下載。它分為三個版本:獨立運行的版本、JBuilder版本和Eclipse版本。

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

圖3

2.JInto插件

這個插件可以從http://www.guh-software.de/jinto.html下載。它的基本功能和Properties Editor插件類似,只是以表格形式編輯屬性文件,如圖4所示。

圖4

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

圖5

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved