1. 程式人生 > >linux使用SSH中文亂碼的解決方法

linux使用SSH中文亂碼的解決方法


初入linux的程式設計師們,經常會受到亂碼的問候。可謂“始亂終棄”。因為亂碼,並且最終放棄了linux的不在少數。好吧,言歸正傳,下面來看一下linux亂碼的具體解決辦法吧。

方法一: 修改/etc/locale.conf檔案,增加export LANG=zh_CN.GB18030

該檔案在使用者目錄下,對於其他使用者,也必須相應修改該檔案。

使用該方法時putty能顯示中文,但桌面系統是英文,而且所有的網頁中文顯示還是亂碼

方法二:
修改/etc/sysconfig/i18n檔案 

?
123#LANG="en_US.UTF-8" #SUPPORTED="en_US.UTF-8:en_US:en" #SYSFONT="latarcyrheb-sun16"

修改為: 

?
12345LANG="zh_CN.GB18030" LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" SUPPORTED="zh_CN.GB18030:zh_CN:zh" SYSFONT="lat0-sun16" SYSFONTACM="8859-15"

參考:

Linux中文亂碼問題

最近,公司在XP系統於LINUX之間傳資料時出現了中文亂碼問題!

首先,字符集:

漢字編碼:

* GB2312字集是簡體字集,全稱為GB2312(80)字集,共包括國標簡體漢字6763個。 * BIG5字集是臺灣繁體字集,共包括國標繁體漢字13053個。 * GBK字集是簡繁字集,包括了GB字集、BIG5字集和一些符號,共包括21003個字元。 * GB18030是國家制定的一個強制性大字集標準,全稱為GB18030-2000,它的推出使漢字集有了一個“大一統”的標準。

ASCII:

American Standard Code for Information Interchange,美國資訊交換標準碼。 目前計算機中用得最廣泛的字符集及其編碼,由美國國家標準局(ANSI)制定。 它已被國際標準化組織(ISO)定為國際標準,稱為ISO 646標準。 ASCII字符集由控制字元和圖形字元組成。 在計算機的儲存單元中,一個ASCII碼值佔一個位元組(8個二進位制位),其最高位(b7)用作奇偶校驗位。 所謂奇偶校驗,是指在程式碼傳送過程中用來檢驗是否出現錯誤的一種方法,一般分奇校驗和偶校驗兩種。 奇校驗規定:正確的程式碼一個位元組中1的個數必須是奇數,若非奇數,則在最高位b7添1。

偶校驗規定:正確的程式碼一個位元組中1的個數必須是偶數,若非偶數,則在最高位b7添1。

UTF:
Unicode 的實現方式不同於編碼方式。 一個字元的Unicode編碼是確定的,但是在實際傳輸過程中,由於不同系統平臺的設計不一定一致,以及出於節省空間的目的,對Unicode編碼的實現 方式有所不同。 Unicode的實現方式稱為Unicode轉換格式(Unicode Translation Format,簡稱為 UTF)。 * UTF-8: 8bit變長編碼,對於大多數常用字符集(ASCII中0~127字元)它只使用單位元組,而對其它常用字元(特別是朝鮮和漢語會意文字),它使用3位元組。 * UTF-16: 16bit編碼,是變長碼,大致相當於20位編碼,值在0到0x10FFFF之間,基本上就是unicode編碼的實現,與CPU字序有關。

注意:ASCII char (2) ;UTF-8 寬字元 wchar 4倍 。相容性最好的編碼就是UTF-8! 畢竟GBK/GB2312是國內的標準,當大量使用國外的開源軟體時,UTF-8才是編碼界最通用的語言。

在Linux中通過locale來設定程式執行的不同語言環境,locale由ANSI C提供支援。locale的命名規則為<語言>_<地區>.<字符集編碼>,如zh_CN.UTF-8,zh代表中 文,CN代表大陸地區,UTF-8表示字符集。

在locale環境中,有一組變數,代表國際化環境中的不同設定:

1. LC_COLLATE
定義該環境的排序和比較規則

2. LC_CTYPE
用於字元分類和字串處理,控制所有字元的處理方式,包括字元編碼,字元是單位元組還是多位元組,如何列印等。是最重要的一個環境變數。

3. LC_MONETARY
貨幣格式

4. LC_NUMERIC
非貨幣的數字顯示格式

5. LC_TIME
時間和日期格式

6. LC_MESSAGES
提示資訊的語言。另外還有一個LANGUAGE引數,它與LC_MESSAGES相似,但如果該引數一旦設定,則LC_MESSAGES引數就會失效。 LANGUAGE引數可同時設定多種語言資訊,如LANGUANE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"。

7. LANG
LC_*的預設值,是最低級別的設定,如果LC_*沒有設定,則使用該值。類似於 LC_ALL。

8. LC_ALL
它是一個巨集,如果該值設定了,則該值會覆蓋所有LC_*的設定值。注意,LANG的值不受該巨集影響。

例子:

設定前,使用預設locale: 

程式碼示例:

?
123456789101112131415[[email protected] ~]# locale LANG="POSIX" LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=

設定後,使用zh_CN.GDK中文locale:

程式碼示例:

?
12345678910111213141516[[email protected] ~]# export LC_ALL=zh_CN.GBK [[email protected] ~]# locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.GBK" LC_NUMERIC="zh_CN.GBK" LC_TIME="zh_CN.GBK" LC_COLLATE="zh_CN.GBK" LC_MONETARY="zh_CN.GBK" LC_MESSAGES="zh_CN.GBK" LC_PAPER="zh_CN.GBK" LC_NAME="zh_CN.GBK" LC_ADDRESS="zh_CN.GBK" LC_TELEPHONE="zh_CN.GBK" LC_MEASUREMENT="zh_CN.GBK" LC_IDENTIFICATION="zh_CN.GBK" LC_ALL=zh_CN.GBK

"C"是系統預設的locale,"POSIX"是"C"的別名。所以當我們新安裝完一個系統時,預設的locale就是C或POSIX。
在Debian中安裝locales的方法如下:

  •  通過apt-get install locales命令安裝locales包
  • ·安裝完成locales包後,系統會自動進行locale配置,你只要選擇所需的locale,可以多選。最後指定一個系統預設的locale。這樣系統就會幫你自動生成相應的locale和配置好系統的locale。
  • 增加新的locale也很簡單,用dpkp-reconfigure locales重新配置locale即可。
  • 我們也可手動增加locale,只要把新的locale增加到/etc/locale.gen檔案中,再執行locale-gen命令即可生成新的 locale。再通過設定上面介紹的LC_*變數就可設定系統的locale了。下是一個locale.gen檔案的樣例。

程式碼示例:

?
1234567# This file lists locales that you wish to have built. You can find a list # of valid supported locales at /usr/share/i18n/SUPPORTED. Other # combinations are possible, but may not be well tested. If you change # this file, you need to rerun locale-gen. # zh_CN.GBK GBK zh_CN.UTF-8 UTF-8

在我看來只要搞清楚LANG和SUPPORTED就OK了,其他可能平時也用不太多。

這裡再介紹下如何設定環境變數的。

修改 /etc/sysconfig/i18n 檔案,如

程式碼示例:

?
12LANG="en_US.UTF-8",xwindow會顯示英文介面, LANG="zh_CN.GB18030",xwindow會顯示中文介面。

還有一種方法 cp /etc/sysconfig/i18n $HOME/.i18n

修改 $HOME/.i18n 檔案,如

程式碼示例:

?
12LANG="en_US.UTF-8",xwindow會顯示英文介面, LANG="zh_CN.GB18030",xwindow會顯示中文介面。

這樣就可以改變個人的介面語言,而不影響別的使用者

修改後的/etc/sysconfig/i18n 檔案為:

程式碼示例:

?
12345LANG="en_US.UTF-8" SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en" SYSFONT="latarcyrheb-sun16" LC_ALL="en_US.UTF-8" export LC_ALL

設定完畢後重啟或者用rc.local使生效

或修改登入使用者的.bash_profile檔案加入

程式碼示例:

?
12export LANG=zh_CN.GB18030 export LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN

一定要知道Windows XP 是GB2312的編碼,如果你的伺服器字符集不是這個,估計就會是亂碼,所以要調整。

有些人在調整的時候,說我改了系統環境變數,結果造成使用者內容顯示亂碼,無非解決的方法就是兩個:

1.用iconv轉化為目前的編碼

2.用你原來使用的編碼

看了這兩條,你肯定必須要明確,你原來的字元編碼是如何的。說來說去,無非就是LANG SUPPORTED 和你原檔案字符集的編碼:)

當然了locale -a你可以看看目前系統裡支援的字符集,如果不支援,還要安裝奧。

前兩個方法很實用,我試驗過。其他方法都是在網上搜到的,呵呵。。。

****************************

就是從資料庫中取出來時,在存入linux的檔案裡時,在字元流時制定編碼格式。程式碼如下:

程式碼示例:

?
1234567891011121314FileOutputStream fos=new FileOutputStream(new File(filePath),true); Writer out=new OutputStreamWriter(fos,"UTF-8"); out.write(s); out.write("\n"); out.flush(); fos.close(); out.close(); ********************** vi .bash_profile export lang=zh_CN vi /etc/sysconfig/i18n LANG="en_US.UTF-8" SUPPORTED="en_US.UTF-8:en_US:en:zh_CN.GB18030:zh_CN:zh:zh_TW.big5:zh_TW:zh:ja_JP.UTF-8:ja_JP:ja:ko_KR.eucKR:ko_KR:ko" SYSFONT="latarcyrheb-sun16"

只改第一個不管用,好像第二個尤其重要,必須改。

1、console終端亂碼

在/etc/profile檔案的最後一行新增如下內容:

程式碼示例:

?
1export LC_ALL="zh_CN.GB18030"

2、xwindow終端亂碼

在/etc/sysconfig/i18n檔案的最後一行新增如下內容:

程式碼示例:

?
1export LC_ALL="zh_CN.GB18030"

亂碼分兩種情況:

1.終端(純shell介面)的亂碼

程式碼示例:

?
12vi /etc/profile export LC_ALL="zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh:zh_TW:zh_CN.BIG5"

儲存退出,reboot系統即可..

2.X-window(圖形介面)的亂碼

程式碼示例:

?
123vi /etc/sysconfig/i18n LANG="zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh:zh_TW:zh_CN.BIG5" LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN.GBK:zh_CN:en_US.UTF-8:en_US:en:zh:zh_TW:zh_CN.BIG5"

儲存reboot即可...

新發了臺linux虛擬機器,用VIM出現了中文亂碼問題,查找了資料,解決方法:

?
1vi /etc/sysconfig/i18n

將內容改為 

程式碼示例:

?
1234LANG="zh_CN.GB18030" LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en" SYSFONT="lat0-sun16"

這樣中文在SSH,telnet終端就可以正常顯示了

其中,主要修改的內容主要為zh_CN.GB18030,其中要注意VI個性的內容為根目錄下,要注意許可權。

每次裝完linux,用SSH連線,中文總是顯示亂碼。

解決方法:編輯/etc/sysconfig/i18n,將其中的 LANG="zh_CN.UTF-8" 改為 LANG="zh_CN.GB2312" 。

斷開重新連線。

附1,linux下中文亂 碼問題解決方案。

從windows傳過來的檔案拷到linux下是亂碼,俺們又想在linux下顯示中文,怎麼辦呢?我們首先進行測試,linux下的中文是否可以正常顯 示?答:yes. 所以問題就比較明顯了,windows下拷過來的不能顯示,說明windows下和linux下支援的格式是不相同的.
linux下一般是採用utf-8的編碼,而我們在windows上編輯檔案時是gb2312的編碼。所以導致中文編碼會亂碼。要更正這個問題實際上很簡單隻要把檔案轉換成utf-8編碼格式然後再匯入就ok啦。

然後使用如下命令進行轉換:

?
1iconv -f gb2312 -t utf-8 test.txt> testutf8.tzt

(-f 就是源編碼,-t 轉換目標編碼,test.txt原始檔,testutf8.txt生成目標編碼檔案)

備註:使用 iconv -l 可以檢視系統支援編碼格式。當然也可以新增其中的編碼格式:

預設為utf8,如果想用其他編碼如GBK

手動更改配置檔案的命令:

?
1shell> vi /etc/sysconfig/i18n

將LANG="zh_CN.UTF-8"修改為:

?
1LANG="zh_CN.GBK"

儲存並關閉,執行下面的命令使配置生效:

?
1shell> source /etc/sysconfig/i18n

將終端字元編碼顯示為簡體中文:

?
1shell> vi /etc/profile.d/chinese.sh

新增下面這行:

程式碼示例:

?
12export LC_ALL=zh_CN.GBK shell> source /etc/profile.d/Chinese.sh

附2,解決Linux作業系統下Java的中文亂碼問題 。

在jdk15以後,只需在~/jre/lib/fonts/下建一個fallback目錄,把你想在java中使用的字型烤貝到這個目錄中即可

以下方法在fc6下測試通過,假設使用者的jre路徑為 /usr/java/jdk1.6.0_03/jre/

程式碼示例:

?
12cd /usr/java/jdk1.6.0_03/jre/lib/fonts sudo mkdir fallback

將C:\WINDOWS\Fonts\simsun.ttc拷貝到 /usr/java/jdk1.6.0_03/jre/lib/fonts/fallback資料夾內
export LC_ALL=zh_CN.GB2312;export LANG=zh_CN.GB2312是最有效的。

1.不管用那種ssh客戶端,字型設定一定要設為可以顯示中文的字型。

2.遠端的locale一定要設定為LANG=zh_CN.UTF-8

修改/etc/profile

增加這一行

?
1export LC_ALL=zh_CN.GBK

附3,SSH顯示中文亂碼問題

1)、開啟/etc/sysconfig/i18n

設定為:

程式碼示例:

?
12345LANG="zh_CN.GB2312" LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN" SUPPORTED="zh_CN.GB18030:zh_CN.GB2312:zh_CN.UTF-8:zh:en_US.UTF-8:en_US:en:ja_JP.UTF-8:ja_JP:ja" SYSFONT="lat0-sun16" SYSFONTACM="8859-15"

其中LANG="zh_CN.GB2312" 是必須的(如果你不想讓中文亂碼的話!!!)

其它的可以按照自已的需求來改變。

2)、開啟smb.conf

新增:

程式碼示例:

?
123display charset=cp936 unix charset=cp936 doc charset=cp936

相關推薦

Eclipse的properties文件中文亂碼解決方法

text content elf abd 問題 clas nbsp ips -o 轉自:http://jingyan.baidu.com/article/ed2a5d1f3381d709f6be17f8.html 打開Myeclipse,找到window這一欄,點

Codeblocks 中文亂碼解決方法

gif www 有效 file odi fault 輸入 打開文件 一個 1.修改源文件保存編碼 settings->Editor->gernal settings 右邊的Encoding group Box Use encoding when openin

前臺傳參到後臺中文亂碼解決方法

sele watermark img -o reset 圖片 亂碼 字符 size 解決前端傳參到後臺的字符集編碼問題!!!第一種:---java的web.xml中加上字符集過濾 (推薦使用)<filter> <filter-name>

Django 分頁查詢並返回jsons數據,中文亂碼解決方法

返回json 類型 模型 數據流 class stringio self option sci Django 分頁查詢並返回jsons數據,中文亂碼解決方法 一、引子 Django 分頁查詢並返回 json ,需要將返回的 queryset 序列化, demo 如下: #

sublime 中文亂碼解決方法

1.sublime 中 preference -> browse->packages 2.在彈出的視窗返回上一層 找到Installed Packages 資料夾 3.下載檔案 放到這個Installed Packages資料夾裡面

Qt5中文亂碼解決方法

Qt中的中文顯示,經常會出現亂碼,但在UI設計介面上新增的中文是不會出現亂碼的,如果你剛使用QT,那麼你肯定會碰到這個問題。 網上搜索一下,找到的都是這種: #include < QTextCodec > int main(int argc, char **argv) { .

request.getParameter(“引數名”) 中文亂碼解決方法【新手設定問題】【JSP】-表單傳值問題:為什麼設定UTF-8之後還是亂碼

request.getParameter(“引數名”) 中文亂碼解決方法【新手設定問題】【JSP】-表單傳值問題:為什麼設定UTF-8之後還是亂碼? 問題:jsp讀取的value值亂碼;設定UTF-8之後還是亂碼…… 備註:本文是轉載的,題目上增加關鍵詞方便查詢

git- win10 cmd git log 中文亂碼 解決方法

在win10中,用cmd或者bash中使用git時候,經常遇到亂碼問題,網上類似的教程很多,一般可以直接在cmd/bash中輸入如下設定命令: git config --global core.quotepath false git config --global gui.enco

Visual Studio Code 開啟程式檔案中文亂碼解決方法

文章原始地址: http://feotech.com/?p=76 使用Visual Studio Code開啟程式檔案後對應的中文亂碼,造成這種現象的原因是檔案的編碼方式不同. 可以通過調整開啟檔案的編碼方式來解決Visual Studio Code開啟中文亂碼的問題. 操

Python3 json.dumps中文亂碼解決方法

1.python檔案開頭匯入 from __future__ import unicode_literals import json string = '今天' print(json.dumps(str,ensure_ascii=False)) 參考資料:

Apache Index目錄中文亂碼解決方法

來源地址: http://httpd.apache.org/docs/2.0/mod/mod_autoindex.html IndexOptions Directive Description: Various configuration settings for directory

python爬蟲中文亂碼解決方法

python爬蟲中文亂碼 前幾天用python來爬取全國行政區劃編碼的時候,遇到了中文亂碼的問題,折騰了一會兒,才解決。現特記錄一下,方便以後檢視。 我是用python的requests和bs4庫來實現爬蟲,這兩個庫的簡單用法可參照python爬取噹噹網的書籍資訊並儲存到csv檔案 亂碼未處理前部分程式碼

centos7 中文亂碼解決方法

1.檢視安裝中文包: 檢視系統是否安裝中文語言包 (列出所有可用的公共語言環境的名稱,包含有zh_CN) # locale -a |grep "zh_CN" 沒有輸出,說明沒有安裝,輸入下面的命令安裝: # yum groupinstall "fonts" -y 安

Jupyter Notebook 用matplotlib作圖顯示中文亂碼解決方法

作圖的時候,中文總是顯示亂碼,折騰了一會,找到非常簡單的方法,只需要加一行程式碼就行 在 import matplotlib.pyplot as plt  後面加上下面一行語句: plt.rc('font', family='SimHei', size=7)  ##

Java Web 中 Servlet 中文亂碼解決方法

Servlet中文亂碼問題解決方法 import java.io.*; import java.net.URLEncoder; import javax.servlet.*; import javax

request.getParameter(“引數名”) 中文亂碼解決方法【新手設定問題】【JSP】-表單傳值問題

備註:本文是轉載的,題目上增加關鍵詞方便查詢,另外部分文字排版了,方便檢視。(點選檢視源網頁) 原文: 在Java 開發中,如果框架搭建的不完善或者初學者在學習過程中,出現中文亂碼是經常的事兒。(哈。誰讓發明java語言的不是中國人呢) 今天跟大家分享幾個

Centos 中文亂碼解決方法

Centos 中文亂碼解決方法 問題描述 crontab -e 新增定時任務時,直接將下面內容貼上過去,結果竟然亂碼了。 # 每個星期日凌晨3:00執行完全備份指令碼 0 3 * * 0 /bin/bash -x /root/bash/Mysql-FullyBak.sh >/dev/null 2&

SecureCRT中文亂碼解決方法

1)重新檢視會話,是否中文顯示正常 2)依然無法正常顯示中文,可能是由於Linux系統中預設的字元編碼非UTF8所致 用root使用者登入。輸入cat /etc/sysconfig/i18n 如果安裝系統為中文系統,則修改【LANG=“zh_CN.UTF-8”】 如果

xshell中出現中文亂碼解決方法

        作為一個IT程式設計師,經常需要遠端登入Linux系統的伺服器,使用工具Xshell工具,但是很多時候出現中文問題。根本原因為遠端伺服器Linux系統和本地系統的編碼不一致導致的 。此處的資訊雖然是“總共76”兩個中文漢字,但還是顯示亂碼。一、問題原因:1、遠

php var_dump 列印不全,且中文亂碼解決方法

列印不全: 解決方法: 在php.ini裡的xdebug節點中,追加一下配置: 1 2 3 4 5 xdebug.var_display_max_children=128 xdebug.var_display_max_data=512