解決CentOS7中文語言亂碼(包括Tomcat日誌中文亂碼)問題

来源:http://www.cnblogs.com/admix/archive/2017/07/10/7145200.html
-Advertisement-
Play Games

Linux系統中文語言亂碼,是很多小伙伴在開始接觸Linux時經常遇到的問題,而且當我們將已在Wndows部署好的項目搬到Linux上運行時,Tomcat的輸出日誌中文全為亂碼(在Windows上正常),看著非常心塞,那麼我們應該怎麼解決呢? 系統中文亂碼 Tomcat輸出日誌中文亂碼 系統環境 C ...


   Linux系統中文語言亂碼,是很多小伙伴在開始接觸Linux時經常遇到的問題,而且當我們將已在Wndows部署好的項目搬到Linux上運行時,Tomcat的輸出日誌中文全為亂碼(在Windows上正常),看著非常心塞,那麼我們應該怎麼解決呢?

  

               系統中文亂碼

                Tomcat輸出日誌中文亂碼

 系統環境

  • CentOS 7.0 64位
  • jdk-8u11-linux-x64.
  • apache-tomcat-8.5.16

     解決步驟:

   1.安裝中文語言包  

        先查看系統是否有安裝中文語言包  

       # locale -a  (列出所有可用的公共語言環境的名稱)

        

                     若發現以上幾項,說明系統已安裝中文語言包,無需再安裝,那這幾項代表什麼意思呢?

        {語言代號}_{國家代號}.{字元集}

        zh是中文的代號、CN是中國的代號、gb18030,gb2312,utf8是語言字元集

        那麼每一項可以通俗理解為   “你是說中文的,你在中國,語言字元集是gb18030/gb2312/utf8”

        如果沒有發現以上幾項,則手動安裝中文語言包

       # yum install kde-l10n-Chinese            (大概11M)

   2.修改i18n國際化和locale.conf本土化配置文件

      在修改配置文件之前,我們先看看當前系統語言環境

                        #    locale  

          

 ("en_US.UTF-8"按照上面的內容可以理解為“你說英語,你在美國,語言字元集為UTF-8”) 

            每項的意思分別為 :

       LANG:當前系統的語言

                    LC_CTYPE:語言符號及其分類

       LC_NUMERIC:數字

       LC_COLLATE:比較和排序習慣

       LC_TIME:時間顯示格式

       LC_MONETARY:貨幣單位

      LC_MESSAGES:信息主要是提示信息,錯誤信息, 狀態信息, 標題, 標簽, 按鈕和菜單等

      LC_NAME:姓名書寫方式

      LC_ADDRESS:地址書寫方式

      LC_TELEPHONE:電話號碼書寫方式

      LC_MEASUREMENT:度量衡表達方式

        LC_PAPER:預設紙張尺寸大小

        LC_IDENTIFICATION:對locale自身包含信息的概述

     LC_ALL:優先順序最高變數,若設置了此變數,所有LC_* 和LANG變數會強制跟隨它的值

     我們看到雖然安裝了中文語言包但本機的語言環境並不是中文,先修改i18n配置文件

     #    vim /etc/sysconfig/i18n

      添加如下兩行代碼

      LANG="zh_CN.UTF-8"
      LC_ALL="zh_CN.UTF-8"

     

    #  source    /etc/sysconfig/i18n

    再修改 locale.cnf配置文件

    #   vim /etc/locale.conf

              LANG="zh_CN.UTF-8"

      

              #  source   /etc/locale.conf

     重啟系統

     # reboot

  3.設置終端連接編碼

     文件->打開->選中會話->右鍵->屬性->終端 (我用的終端連接工具是Xshell,其它連接工具更改編碼方式請自行百度)

     將編碼改為 UTF-8

        

     重新連接,再查看當前系統語言環境

      # locale 

                    

     發現系統語言環境已經成功改為 “zh_CN.UTF-8”

     再次嘗試編輯中文

     # vim 你是豬嗎

     

      #  ls

     

     SUCCESS!至此,系統中文亂碼問題已解決。

  4.解決Tomcat輸出日誌亂碼

  既然系統中文亂碼已經解決了,那麼Tomcat輸出日誌中文亂碼會不會也解決了呢?

  我們現在看看Tomcat輸出日誌  

  進入Tomcat目錄

      # cd $CATALINA_HOME

     #  tail -f ./logs/catalina.out

      

  很遺憾,Tomcat日誌中文還是亂碼。

  分析:既然系統已經不會出現中文亂碼,證明系統語言環境是正常的,但是Tomcat日誌還會出現中文亂碼,說明是Tomcat內部的問題,網上查了一些資料,知道是JVM(Java Virtual Machine)

     java虛擬機所用的字元集與系統所用的字元集不一致造成的,知道原因,問題就好解決了,可以通過配置JVM的啟動參數來達到修改JVM所使用字元集的目的。

       # ls -l ./bin/

      

  找到 daemon.sh 和 catalina.sh   分別加入以下代碼:

      JAVA_OPTS="$JAVA_OPTS -Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8 -Duser.language=zh_CN -Dsun.jnu.encoding=UTF-8"

      # vim ./bin/daemon.sh

     

     # vim ./bin/catalina.sh

  

  保存退出,重啟Tomcat

  # ./bin/shutdown.sh

    # ./bin/startup.sh

 現在再查看輸出日誌

   # tail -f ./logs/catalina.out

  向伺服器發一次請求

 

 Tomcat輸出日誌中文正常顯示。

           end!    (*^-^*)        

                          -----------------------------------------------本人能力有限,有錯誤或者不足之處歡迎指正,也歡迎聯繫我交流學習------------------------------------------------------------

聯繫方式

                                                                                           By 網維團隊-----謝崢嶸


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 之前寫代碼,往後臺傳入一個組織好的String類型的Hql或者Sql語句,去執行。 這樣其實是很蠢的一種做法!!!! 舉個慄子~~ 我們模仿一下用戶登錄的場景: 常見的做法是將前臺獲取到的用戶名和密碼,作為字元串動態拼接到查詢語句中,然後去調用資料庫查詢~查詢的結果不為null就代表用戶存在,則登陸 ...
  • 轉載 http://blog.csdn.net/looksun/article/details/51445205 如一張表的數據如下: 需要根據gz列的值進行升序排序,但值為0的排在最後面,即最終結果如下圖: 具體 實現方法如下: 1.Order BY表達式 SELECT nian ,gz from ...
  • <mongodb在linux上的部署> 事實上redis安裝程式挺好,直接幫我們生成了服務,直接可以使用systemctl去啟動它,而mongodb在這方面沒有那麼智能,需要我們去編寫自己的服務腳本了,然後把它加到開機自啟動裡面就可以了,主要的過程分為以下幾個步驟: mongodb我安裝在了/roo ...
  • 以前在開發中需要用到帶錯誤處理的存儲過程,在網上找到瞭解決方案,現在整理在這,以備日後所需,時間長了原文已經找不到了,感謝為我提供幫助的兄弟。 1.創建錯誤日誌表 2.創建寫入錯誤日誌的存儲過程 3.創建列印錯誤信息的存儲過程 4.創建自己的存儲過程 ...
  • 在/usr/local/apache/conf/httpd.conf文件末位添加以下信息: ...
  • 上周日折騰了一次阿裡雲伺服器,被linux的網路問題折騰的夠嗆。在這裡簡單做個問題的概要記錄,以備忘。題目中說自己是小白,其實也不完全是小白,自己對一些linux的常用命令還是有所瞭解的,但是對於linux系統缺乏一個整體的把握和掌控能力,下麵簡單總結下上周日折騰的一些事情。 1,讓ssh登錄變的更 ...
  • 1. 準備工作: 準備一臺ubuntu機器,將boot.img複製到該機器上,下載必要的工具sudo apt-get install abootimggit clone https://github.com/anestisb/android-simg2img.gitcd android-simg2i ...
  • 本文所選的例子來自於《Advanced Bash-scripting Gudie》一書,譯者 楊春敏 黃毅 腳本運行結果 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...