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

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

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

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數據加載中……

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

    本文為原創,如需轉載,請注明作者和出處,謝謝!

    Struts 2系列教程》
       

    上一篇:Struts1.x系列教程(2):簡單的數據驗證

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

    一、使用native2ascii命令使資源文件支持中文
        從上篇文章中的ErrorDescription.properties文件中可以看到所有的錯誤提示信息都是英文的。在客戶端顯示這些英文信息沒有任何問題。但如果將這些英文錯誤提示信息改成相應的中錯誤提示信息又會如何呢?
       
    在修改之前,先讓我們選中ErrorDescription.properties文件,單擊右鍵,在右鍵菜單中選擇【Properties】菜單項,打開屬性設置對話框,在右側所列的項目中選擇【Resource】。看一下右下角的“Text file encoding”的編碼格式,如果編碼格式不是UTF-8GBK(也包括GB2312GB18030),請將編碼格式修改為UTF-8GBK,否則無法使用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-8GBK了,而且所輸入的中文在MyEclipse中也能正常顯示,并且頁面中的設置的編碼格式也和屬性文件中的編碼格式一致,那么為什么會輸出亂碼呢?
       
    產生這個問題的原因要從Java對各種類型的文件的處理方式上說起。Java在處理*.java文件時,無論*.java文件的編碼格式是UTF-8還是GBK。在使用javac.exe編譯時,都會將其轉換成UCS-2編碼格式。因此,*.java文件就不會出現亂碼。而Java在處理屬性文件時,只能處理ISO 8859-1(也稱為latin-1或“西歐語言”)UCS-2\uxxxx格式)編碼格式。因此,如果在屬性文件中含有其他編碼格式的字符,如GBKJava仍然會按著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內嵌的屬性編輯器類似。在下載插件壓縮包后,將其解壓,將featuresplugins兩個目錄復制到<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

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

    下一篇:
    Struts1.x系列教程(4):標簽庫概述與安裝





    Android開發完全講義(第2版)(本書版權已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-01-14 12:36 銀河使者 閱讀(6725) 評論(3)  編輯  收藏 所屬分類: javaweb 原創struts1.x

    評論

    # re: Struts1.x系列教程(3):屬性(資源)文件亂碼問題的解決之道  回復  更多評論   

    http://www.ourjavasky.cn java論壇
    2009-01-14 12:56 | ourjavasky

    # re: Struts1.x系列教程(3):屬性(資源)文件亂碼問題的解決之道  回復  更多評論   

    "但Java的屬性文件只支持英文,要想在屬性文件中保存中文,需要使用"uxxxx格式,但這非常不方便"
    此言差矣!在jdk1.6里Properties.load()方法已經不再是只能以InputStream的形式加載內容,而是多了個Properties.load(Reader reader)的方法,這樣,你就可以把reader包裝一下,指定具體的字符集編碼,不再需要做uxxxx的轉換了
    2009-01-14 16:48 | kanine

    # re: Struts1.x系列教程(3):屬性(資源)文件亂碼問題的解決之道  回復  更多評論   

    也許新版本的jdk可以不使用\uxxxx格式,但并不是所有的開發人員都使用最新的jdk,還有就是雖然新版本的jdk可以讀取其他格式的屬性文件,但有些框架可能并沒有使用這些功能,因此,使用Properties.load方法讀取屬性文件只能用在完全由自己控制的情況下,如果處理屬性文件的功能是其他人做的,而且還不能修改代碼,那就得聽天由命了,完全取決于這個人是否使用了新功能來處理屬性文件。
    2009-01-14 18:50 | 銀河使者
    主站蜘蛛池模板: 久久亚洲日韩看片无码| 全亚洲最新黄色特级网站| 久久久久亚洲Av片无码v| 一级毛片正片免费视频手机看| 色视频色露露永久免费观看| 亚洲乱理伦片在线观看中字| 老司机永久免费网站在线观看| 亚洲AV综合色区无码一二三区| 永久久久免费浮力影院| 精品一区二区三区免费毛片| 亚洲人成无码网WWW| 黄色网站软件app在线观看免费| 亚洲成色WWW久久网站| 99在线观看精品免费99| 亚洲大尺码专区影院| 最近免费中文字幕大全视频 | 亚洲一区免费观看| 亚洲精品乱码久久久久久下载| 最近高清中文字幕免费| 久久精品国产亚洲av麻豆图片| 免费理论片51人人看电影| 特级毛片全部免费播放| 在线亚洲精品福利网址导航| 成全视频免费观看在线看| 亚洲午夜电影在线观看高清| 日韩高清免费观看| 九一在线完整视频免费观看| 国产AV无码专区亚洲AV毛网站| 性xxxxx免费视频播放| 亚洲av永久无码精品网址| 国产亚洲欧洲Aⅴ综合一区| 色欲国产麻豆一精品一AV一免费| 中文无码亚洲精品字幕| 亚洲人成影院在线观看| 97碰公开在线观看免费视频| 色偷偷噜噜噜亚洲男人| 久久国产精品亚洲一区二区| 夜夜爽免费888视频| 青青操视频在线免费观看| 亚洲欧洲日韩极速播放| 亚洲国产精品一区二区成人片国内|