linux 亂碼問題

2021-06-29 00:47:21 字數 4613 閱讀 2049

官網:

/etc/sysconfig/i18n,

系統國際化配置檔案, 也就是,你的系統桌子圖示文字、選單文字,幫助提公升文字, 控制台下的提示文字,僅僅一層皮而已。

vi /etc/sysconfig/i18n

預設為:

lang=」en_us.utf-8」

sysfont=」latarcyrheb-sun16」

locale 命令

locale 命令可以動態設定lang,

修改locale 有多種方式

1、 直接修改 /etc/sysconfig/i18n(不建議)

2、在/etc/profile 中新增 export lang=zh_cn.gb18030 對所有使用者生效

3、在當前使用者~/.bashrc 中新增 export lang=zh_cn.gb18030 對當前使用者生效。

4、設定lc_all=

優先順序關係: lc_all > lc_* > lang> /etc/sysconfig/i18n中lang 設定

[root@ay1310091500504571b0z ~]# locale

lang=en_us.utf-8

lc_ctype="en_us.utf-8"

lc_numeric="en_us.utf-8"

lc_time="en_us.utf-8"

lc_collate="en_us.utf-8"

lc_monetary="en_us.utf-8"

lc_messages="en_us.utf-8"

lc_*****="en_us.utf-8"

lc_name="en_us.utf-8"

lc_address="en_us.utf-8"

lc_telephone="en_us.utf-8"

lc_measurement="en_us.utf-8"

lc_identification="en_us.utf-8"

lc_all=

在 vim 中,有四個與編碼有關的選項,它們是:fileencodings、fileencoding、encoding 和 termencoding。在實際使用中,任何乙個選項出現錯誤,都會導致出現亂碼。因此,每乙個 vim 使用者都應該明確這四個選項的含義。下面,我們詳細介紹一下這四個選項的含義和作用。

1 encodingencoding是 vim 內部使用的字元編碼方式。當我們設定了 encoding 之後,vim 內部所有的 buffer、暫存器、指令碼中的字串等,全都使用這個編碼。vim 在工作的時候,如果編碼方式與它的內部編碼不一致,它會先把編碼轉換成內部編碼。如果工作用的編碼中含有無法轉換為內部編碼的字元,在這些字元就會丟失。因此,在選擇 vim 的內部編碼的時候,一定要使用一種表現能力足夠強的編碼,以免影響正常工作。

由於 encoding 選項涉及到 vim 中所有字元的內部表示,因此只能在 vim 啟動的時候設定一次。在 vim 工作過程中修改encoding 會造成非常多的問題。如果沒有特別的理由,請始終將 encoding 設定為 utf-8。為了避免在非 utf-8 的系統如 windows 下,選單和系統提示出現亂碼,可同時做這幾項設定:

set encoding=utf-8

set langmenu=zh_cn.utf-8

language message zh_cn.utf-8

2 termencodingtermencoding是 vim 用於螢幕顯示的編碼,在顯示的時候,vim 會把內部編碼轉換為螢幕編碼,再用於輸出。內部編碼中含有無法轉換為螢幕編碼的字元時,該字元會變成問號,但不會影響對它的編輯操作。如果 termencoding 沒有設定,則直接使用encoding 不進行轉換。

舉個例子,當你在 windows 下通過 telnet 登入 linux 工作站時,由於 windows 的 telnet 是 gbk 編碼的,而 linux 下使用 utf-8 編碼,你在 telnet 下的 vim 中就會亂碼。此時有兩種消除亂碼的方式:一是把 vim 的 encoding 改為 gbk,另一種方法是保持 encoding 為 utf-8,把 termencoding 改為 gbk,讓 vim 在顯示的時候轉碼。顯然,使用前一種方法時,如果遇到編輯的檔案中含有 gbk 無法表示的字元時,這些字元就會丟失。但如果使用後一種方法,雖然由於終端所限,這些字元無法顯示,但在編輯過程中這些字元是不會丟失的。

對於圖形介面下的 gvim,它的顯示不依賴 term,因此 termencoding 對於它沒有意義。在 gtk2 下的 gvim 中,termencoding 永遠是 utf-8,並且不能修改。而 windows 下的 gvim 則忽略 termencoding 的存在。

3 fileencoding當 vim 從磁碟上讀取檔案的時候,會對檔案的編碼進行探測。如果檔案的編碼方式和 vim 的內部編碼方式不同,vim 就會對編碼進行轉換。轉換完畢後,vim 會將 fileencoding 選項設定為檔案的編碼。當 vim 存檔的時候,如果 encoding 和fileencoding 不一樣,vim 就會進行編碼轉換。因此,通過開啟檔案後設定 fileencoding,我們可以將檔案由一種編碼轉換為另一種編碼。但是,由前面的介紹可以看出,fileencoding 是在開啟檔案的時候,由 vim 進行探測後自動設定的。因此,如果出現亂碼,我們無法通過在開啟檔案後重新設定 fileencoding 來糾正亂碼。

4 fileencodings編碼的自動識別是通過設定 fileencodings 實現的,注意是複數形式。fileencodings 是乙個用逗號分隔的列表,列表中的每一項是一種編碼的名稱。當我們開啟檔案的時候,vim 按順序使用 fileencodings 中的編碼進行嘗試解碼,如果成功的話,就使用該編碼方式進行解碼,並將 fileencoding 設定為這個值,如果失敗的話,就繼續試驗下乙個編碼。

因此,我們在設定 fileencodings 的時候,一定要把要求嚴格的、當檔案不是這個編碼的時候更容易出現解碼失敗的編碼方式放在前面,把寬鬆的編碼方式放在後面。例如,latin1 是一種非常寬鬆的編碼方式,任何一種編碼方式得到的文字,用 latin1 進行解碼,都不會發生解碼失敗——當然,解碼得到的結果自然也就是理所當然的「亂碼」。因此,如果你把 latin1 放到了 fileencodings 的第一位的話,開啟任何中文檔案都是亂碼也就是理所當然的了。

以下是推薦的乙個 fileencodings 設

其中,ucs-bom 是一種非常嚴格的編碼,非該編碼的檔案幾乎沒有可能被誤判為 ucs-bom,因此放在第一位。

utf-8 也相當嚴格,除了很短的檔案外(例如許多人津津樂道的 gbk 編碼的「聯通」被誤判為 utf-8 編碼的經典錯誤),現實生活中一般檔案是幾乎不可能被誤判的,因此放在第二位。

接下來是 cp936 和 gb18030,這兩種編碼相對寬鬆,如果放前面的話,會出現大量誤判,所以就讓它們靠後一些。cp936 的編碼空間比 gb18030 小,所以把 cp936 放在 gb18030 前面。

至於 big5、euc-jp 和 euc-kr,它們的嚴格程度和 cp936 差不多,把它們放在後面,在編輯這些編碼的檔案的時候必然出現大量誤判,但這是 vim 內建編碼探測機制沒有辦法解決的事。由於中國使用者很少有機會編輯這些編碼的檔案,因此我們還是決定把 cp936 和 gb18030 前提以保證這些編碼的識別。

最後就是 latin1 了。它是一種極其寬鬆的編碼,以至於我們不得不把它放在最後一位。不過可惜的是,當你碰到乙個真的 latin1 編碼的檔案時,絕大部分情況下,它沒有機會 fall-back 到 latin1,往往在前面的編碼中就被誤判了。不過,正如前面所說的,中國使用者沒有太多機會接觸這樣的檔案。

hexdump 檢視二進位制問題

「more aaa.txt |hexdump -c」 或者 「 hexdump -c aaa.txt 」 可以對照檢視檔案內容以二進位制格式

常見的ascii字元的十六進製制表示

\r 0d

\n 0a

\t 09

dos/windows的換行符 \r\n 即十六進製制表示 0d 0a

linux/unix的換行符 \n 即十六進製制表示 0a

將乙個gbk編碼的檔案並另存為utf-8編碼

儲存檔案時執行命令|:set fileencoding=utf-8|就可以了。

vi 亂碼問題

1、使用 securecrt遠端登入了 時:

vi 亂碼解決方式 , 保證vi 的 encoding 同 securecrt的編碼一致即可。(原因是使用securecrt是vi的 termencoding設定無效),

2、使用terminal 遠端登入時

vi 亂碼解決方式 : 保證vi termencoding 設定同 terminal的encoding 一致即可。

3、但是對於阿里這種通過securecrt 跳板機登入的,則需要 在vimrc 中同時設定 encoding 和 termencoding

如果乙個包含中文字元的檔案被vi 探測 fileencode 出錯,那麼如誤人為iso-5558-1,那麼會出現亂碼。

linux亂碼問題

方法一 修改 root bash profile檔案,增加export lang zh cn.gb18030 對於其他使用者,也必須相應修改該檔案 使用該方法時putty能顯示中文,但桌面系統是英文,而且所有的網頁中文顯示還是亂碼 方法二 引用 修改 etc sysconfig i18n檔案 lan...

解決 Linux亂碼問題

最近在用linux rea hat 企業版5 碰到了中文字型亂碼問題,網上搜尋一些解決方案,發現很多文章寫得很長,看著頭暈。1 vim開啟乙個檔案的時候中文注釋部分顯示亂碼,解決方法 在當前使用者下新建乙個.vimrc,加入如下 步驟為 vim root vimrc 敲入以下 set fileenc...

linux 檔案亂碼問題

最近從oracle匯出文字資料出現亂碼問題 原因 linux預設的檔案編碼是 latin 1,如果你匯出的檔案是utf 8,gbk等其他字元的話,就會出現亂碼問題 解決辦法如下 1a.在vim中可以直接檢視檔案編碼 set fileencoding 1b.vimrc 檔案中新增以下內容 set en...