08.Linux中文字符集的設置

一、字符編碼和字符集

1、字符編碼(character encoding):

字符編碼是一種法則,在數字與符號之間建立的對應關係。不同的國家有不同的語言,包含的文字、標點符號、圖形符號各有不同。例如在ASCII編碼中,用數字97表達字符’a’與字符集相對應,常見的字符編碼有ASCII,GBK,GB18030,Unicode等。

2、字符集(Character set)

字符集是字符的集合,字符是文字和符號的總稱,用ASCII編碼的字符集稱之爲ASCII字符集,用GBK編碼的字符集稱之爲GBK字符集。

3、國際編碼(Unicode)

爲了解決傳統的字符編碼方案的侷限,1994年發佈了Unicode(國際編碼、統一碼、萬國碼、單一碼、通用碼),它是計算機科學領域裏的一項業界標準,包括字符集、編碼方案等。Unicode 將全世界所有的字符統一化,統一編碼,再也不存在字符集不兼容和字符轉換的問題。

Unicode 有以下三種編碼方式:

1)UTF-8:兼容ASCII編碼;拉丁文、希臘文等使用兩個字節;包括漢字在內的其它常用字符使用三個字節;剩下的極少使用的字符使用四個字節。

2)UTF-16:對相對常用的60000餘個字符使用兩個字節進行編碼,其餘的使用4字節。

3)UTF-32:固定使用4個字節來表示一個字符,存在空間利用效率的問題。

二、漢字的編碼

1、漢字的編碼

支持漢字(簡體中文)的編碼有GB2312、GB13000、GBK、GB18030和Unicode(UTF-8、UTF-16、UTF-32)。

1)GB2312

僅包含大部分的常用簡體漢字,但已經不能適應現在的需要。

2)GB13000

由於GB2312的侷限性,國家標準化委員會制定了GB13000編碼;但由於當時的硬件和軟件都已經支持了GB2312,而GB13000與GB2312完全不兼容,所以沒有能夠得到大範圍的推廣使用。

3)GBK

有了GB13000的教訓,中國國家標準化委員會制定了GBK標準,併兼容了GB2312標準,同時在GB2312標準的基礎上擴展了GB13000包含的字;由於該標準有微軟的支持,得到了廣泛的應用。

4)GB18030

GB18030編碼比GBK又新增了幾千個漢字,但由於碼位不足使用了2byte與4byte混合編碼方式,這給軟件開發增加了難度。

5)Unicode

包含全世界所有國家需要用到的字符,是國際編碼,通用性強。

2、漢字的編碼選擇

在操作系統和數據庫中,常用的漢字編碼有GBK、GB18030和Unicode,GBK和GB18030的優勢是佔用空間小,Unicode的優勢是全球化的支持。

在應用開發中,如果不考慮全球化,最好的選擇是GBK和GB18030。

3、編碼的轉換

GBK和GB18030與Unicode編碼之間需要轉換,否則會出現漢字亂碼。

三、設置Linux的字符集

1、查看當前系統已安裝的字符集

1)locale命令用於查看當前系統全部的已安裝的字符集,Linux支持的符集約800種。

locale -a

2)查看已安裝的中文字符集(只查看中國大陸的,不包括香港和臺灣)

locale -a|grep zh_CN

在這裏插入圖片描述

上圖表示已經安裝了中文字符集。

2、安裝中文字符集

如果您的Linux系統沒有安裝中文字符集,可以用yum命令安裝。

我查了一些資料,安裝中文字符集軟件包的方法比較多,沒找到準確的說法,所以把多種方法都寫了進來,以下命令都可以執行,不會有副作用。

yum -y groupinstall chinese-support
yum -y install chinese-support
yum -y install kde-l10n-Chinese
yum -y install ibus-table-chinese-1.4.6-3.el7.noarch

安裝後,執行locale -a|grep zh_CN,如果顯示的內容如下,表示安裝成功。

在這裏插入圖片描述

3、修改字符集配置文件

CentOS6.x 字符集配置文件在/etc/sysconfig/i18n文件中。

CentOS7.x 字符集配置文件在/etc/locale.conf文件中,內容如下:

在這裏插入圖片描述

執行以下命令或者重啓系統使修改生效。

CentOS6.x

source /etc/sysconfig/i18n

CentOS7.x:

source /etc/locale.conf

四、LANG環境變量

LANG環境變量存放的是Linux系統的語言、地區、字符集,它不需要系統管理員手工設置,/etc/profile會調用/etc/profile.d/lang.sh腳本完成對PATH的設置。

五、修改客戶端的字符集

客戶端的字符集必須與Linux服務端一致,否則會出現亂碼,以SecureCRT爲例。修改會話的屬性,在Appearance界面中的Character
encoding下拉框中選擇。

在這裏插入圖片描述

六、字符集轉換工具

Linux提供了iconv命令把文件內容從一種編碼轉換成另一種編碼。

參數說明:

--list:列出iconv支持的編碼列表。

-f encoding:源文件內容的編碼。

-t encoding:目標文件內容的編碼。

-o file:指定輸出文件。

-c:忽略輸出的非法字符。

-l:列出已知的編碼字符集。

-s:禁止警告信息,但不是錯誤信息。

--verbose:顯示進度信息。

示例:

把當前目錄的book1.c由gbk轉換成utf-8,結果輸出到/tmp/book1_utf8.c中。

iconv -f gbk -t utf-8 book1.c -o /tmp/book1_utf8.c

七、應用經驗

1)Linux系統在業務化之前,就應該確定字符集,然後不再改變。系統在業務化後,修改字符集是一件很麻煩的事情,最好別惹這個麻煩。

2)如果項目沒有全球化的需求,Linux的字符集建議採用zh_CN.gbk。

3)雖然gb18030字符集比gbk更豐富,但是gb18030中有部分漢字是4字節,這一點讓程序員很鬱悶,所以,程序員更傾向gbk字符集。

4)設置Linux的字符集時,還要考慮WEB系統和數據庫系統採用的字符集,最好是大家都保持一致。

八、版權聲明

C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道

如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章