<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://www.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的話就可以。
    主站蜘蛛池模板: 亚洲国产成a人v在线观看| 亚洲综合综合在线| 羞羞视频网站免费入口| 日本高清免费中文字幕不卡| 亚洲欧美综合精品成人导航| 精品免费国产一区二区三区| 日本亚洲免费无线码 | 亚洲欧洲精品一区二区三区| 国产精品99久久免费观看 | 亚洲人成7777影视在线观看| 0588影视手机免费看片| 亚洲色偷偷色噜噜狠狠99网| 午夜毛片不卡高清免费| 福利片免费一区二区三区| 亚洲乱码日产精品a级毛片久久| 二个人看的www免费视频| 亚洲成在人线av| 四虎精品视频在线永久免费观看| 国产亚洲精品影视在线| 全黄性性激高免费视频| 成人免费ā片在线观看| 国产AV无码专区亚洲AV男同| 一级做a爰片久久毛片免费陪 | 女人让男人免费桶爽30分钟| 亚洲欧洲专线一区| 国产zzjjzzjj视频全免费| av午夜福利一片免费看久久| 亚洲国产一区国产亚洲| 无码一区二区三区免费视频| 国产亚洲Av综合人人澡精品| 亚洲精品午夜无码专区| 2019中文字幕在线电影免费 | 女人被免费视频网站| 有码人妻在线免费看片| 午夜亚洲国产理论秋霞| 四虎成人免费网址在线| 久久毛片免费看一区二区三区| 亚洲精品午夜视频| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 亚洲色大成网站www永久网站| 亚洲人成人网站在线观看|