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

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

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

    posts - 36, comments - 419, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    JAVA 不同區域服務器引起的亂碼解決。

    Posted on 2009-10-24 23:03 BearRui(AK-47) 閱讀(3031) 評論(5)  編輯  收藏 所屬分類: Java

    問題:
                項目在本機開發編譯打包后發布到法國的服務器,代碼中的中文全部亂碼,就算是最簡單的代碼System.out.println("中文"),打印出來的也是亂碼。

          代碼在本地的服務器測試都正常。

          法國服務器的環境:window 2003 中文版。

    解決:

               在網友imasmallbird的指引下,發現是2個服務器的file.encoding的不同,本地服務器是GBK,而法國服務器是Cp1252,所以會產生亂碼。

       把法國服務器的區域設置改成中國后,file.encoding就變成GBK,這樣可以解決這個問題,但因為很多原因不能直接改區域設置,比如改了區域設置后時間就不是法國時間。

       目前解決辦法如下:
              1. 本地編譯打包不用變,本地編譯采用的是GBK編譯的(默認采用系統字符集編譯)

              2. 在法國服務器的tomcat上加上JAVA的啟動參數 -Dfile.encoding=GBK

    重啟tomcat,一切正常了。

    解決了該問題后,順便找了些JAVA的中文亂碼的資料看了下,簡單的總結下:

           從Java 源代碼到得到正確的結果,要經過 “Java 源代碼-> Java 字節碼-> 虛擬機->操作系統->顯示設備”的過程。在上述過程中的每一步驟,我們都必須正確地處理中文的編碼,才能夠使最終顯示正確的結果。

           "Java 源代碼-> Java 字節碼":該階段就是調用javac 進行編譯的階段,javac默認采用系統字符集,比如我們本地機器急就是GBK,如果想用其他的編碼,比如UTF-8,可以加上 -encoding UTF-8

          "Java 字節碼-> 虛擬機->操作系統" :該階段首先需要JRE或者JDK支持多語言(下載JRE的時候會讓你選擇英文版還是多語言版),然后就是虛擬機啟動的時候使用什么字符集,默認也是采用當前系統的字符集,如需要修改字符集,加上JAVA的啟動參數,-Dfile.encoding=GBK

          "操作系統->顯示設備":該階段主要就是需要操作系統支持顯示中文就可以,就是安裝了中文字體。

          看到這里后重新看我們的亂碼問題,我們在本地編譯(Java 源代碼-> Java 字節碼 階段)默認采用了GBK字符集,而"Java 字節碼-> 虛擬機->操作系統" 階段是在法國服務器上進行,也是采用了默認的字符集,但這里的默認字符集確實Cp1252,因字符集不一致,所以就會亂碼。

    PS:以上屬于個人理解,個人水平有限,如說的有問題,還請大蝦們指點。



    [作者]:BearRui(AK-47)
    [博客]: http://m.tkk7.com/bearrui/
    [聲明]:本博所有文章版權歸作者所有(除特殊說明以外),轉載請注明出處.
    英雄,別走啊,幫哥評論下:  

    精彩推薦 好文要頂 水平一般 看不懂 還需努力

    評論

    # re: JAVA 不同區域服務器引起的亂碼解決。  回復  更多評論   

    2009-10-26 11:40 by 淘寶網首頁
    是采用了默認的字符集,但這里的默認字符集確實Cp1252,因字符集不一致,所以就會亂碼

    # re: JAVA 不同區域服務器引起的亂碼解決。  回復  更多評論   

    2009-10-29 09:54 by admin
    一個tomcat上部署一個項目還好,如果多個項目,一個是法語的,一個中文的,如何解決

    # re: JAVA 不同區域服務器引起的亂碼解決。[未登錄]  回復  更多評論   

    2009-10-29 10:17 by lazy
    不知道事先采用utf8會不會避免這個問題

    # re: JAVA 不同區域服務器引起的亂碼解決。  回復  更多評論   

    2009-10-30 23:27 by BearRui(AK-47)
    @admin

    這種情況只能試試這個方法:

    在項目中建1個listener,在應用啟動的時候,設置一個下面的代碼:
    設置

    System.setProperty("file.encoding", "你想要的編碼");

    這個就可以不同的項目設置不同的file.encoding了。

    # re: JAVA 不同區域服務器引起的亂碼解決。  回復  更多評論   

    2009-10-30 23:27 by BearRui(AK-47)
    @lazy
    如果你的服務器本來就是UTF-8的話就可以。
    主站蜘蛛池模板: 亚洲乱码日产精品BD在线观看| 四虎1515hm免费国产| 亚洲女初尝黑人巨高清| 人碰人碰人成人免费视频| 日本高清色本免费现在观看| 亚洲国产成a人v在线观看| 日韩一区二区a片免费观看| 亚洲中文无码av永久| 免费视频专区一国产盗摄| 亚洲国产成人手机在线电影bd| 99爱免费观看视频在线| 亚洲成人网在线观看| 青青在线久青草免费观看| 亚洲国产欧美国产综合一区 | 亚洲午夜精品久久久久久app| 99爱在线精品免费观看| 亚洲人成人77777在线播放 | 久久久高清免费视频| 日本亚洲色大成网站www久久| 成年女人免费视频播放体验区| 亚洲综合色一区二区三区| 日韩在线a视频免费播放| 鲁啊鲁在线视频免费播放| JLZZJLZZ亚洲乱熟无码| 成全视频高清免费观看电视剧 | 成人毛片免费播放| 国产精品亚洲一区二区三区久久| 亚洲а∨天堂久久精品| 黄网站免费在线观看| 亚洲大片免费观看| 免费在线观看一级毛片| a级成人毛片免费图片| 亚洲日韩国产精品无码av| 香蕉视频在线观看免费国产婷婷| 日韩免费码中文在线观看| 久久久久亚洲AV成人无码 | 国产在线观看www鲁啊鲁免费| 一级做a爱片特黄在线观看免费看| 亚洲毛片αv无线播放一区 | 91成人在线免费视频| 亚洲乱理伦片在线观看中字|