LINUX中文亂碼問題
最近,公司在XP系統(tǒng)于LINUX之間傳數(shù)據(jù)時(shí)出現(xiàn)了中文亂碼問題!
首先,解釋一下字符集:
漢字編碼:
ASCII:
American Standard Code for Information Interchange,美國信息交換標(biāo)準(zhǔn)碼。 目前計(jì)算機(jī)中用得最廣泛的字符集及其編碼,由美國國家標(biāo)準(zhǔn)局(ANSI)制定。 它已被國際標(biāo)準(zhǔn)化組織(ISO)定為國際標(biāo)準(zhǔn),稱為ISO 646標(biāo)準(zhǔn)。 ASCII字符集由控制字符和圖形字符組成。 在計(jì)算機(jī)的存儲(chǔ)單元中,一個(gè)ASCII碼值占一個(gè)字節(jié)(8個(gè)二進(jìn)制位),其最高位(b7)用作奇偶校驗(yàn)位。 所謂奇偶校驗(yàn),是指在代碼傳送過程中用來檢驗(yàn)是否出現(xiàn)錯(cuò)誤的一種方法,一般分奇校驗(yàn)和偶校驗(yàn)兩種。 奇校驗(yàn)規(guī)定:正確的代碼一個(gè)字節(jié)中1的個(gè)數(shù)必須是奇數(shù),若非奇數(shù),則在最高位b7添1。 偶校驗(yàn)規(guī)定:正確的代碼一個(gè)字節(jié)中1的個(gè)數(shù)必須是偶數(shù),若非偶數(shù),則在最高位b7添1。
UTF:
Unicode 的實(shí)現(xiàn)方式不同于編碼方式。 一個(gè)字符的Unicode編碼是確定的,但是在實(shí)際傳輸過程中,由于不同系統(tǒng)平臺(tái)的設(shè)計(jì)不一定一致,以及出于節(jié)省空間的目的,對(duì)Unicode編碼的實(shí)現(xiàn)方式有所不同。 Unicode的實(shí)現(xiàn)方式稱為Unicode轉(zhuǎn)換格式(Unicode Translation Format,簡(jiǎn)稱為 UTF)。 * UTF-8: 8bit變長編碼,對(duì)于大多數(shù)常用字符集(ASCII中0~127字符)它只使用單字節(jié),而對(duì)其它常用字符(特別是朝鮮和漢語會(huì)意文字),它使用3字節(jié)。 * UTF-16: 16bit編碼,是變長碼,大致相當(dāng)于20位編碼,值在0到0x10FFFF之間,基本上就是unicode編碼的實(shí)現(xiàn),與CPU字序有關(guān)。
注意:ASCII char (2) ;UTF-8 寬字符 wchar 4倍 。兼容性最好的編碼就是UTF-8! 畢竟GBK/GB2312是國內(nèi)的標(biāo)準(zhǔn),當(dāng)我們大量使用國外的開源軟件時(shí),UTF-8才是編碼界最通用的語言。
定義該環(huán)境的排序和比較規(guī)則
用于字符分類和字符串處理,控制所有字符的處理方式,包括字符編碼,字符是單字節(jié)還是多字節(jié),如何打印等。是最重要的一個(gè)環(huán)境變量。
貨幣格式
非貨幣的數(shù)字顯示格式
時(shí)間和日期格式
提示信息的語言。另外還有一個(gè)LANGUAGE參數(shù),它與LC_MESSAGES相似,但如果該參數(shù)一旦設(shè)置,則LC_MESSAGES參數(shù)就會(huì)失效。LANGUAGE參數(shù)可同時(shí)設(shè)置多種語言信息,如LANGUANE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"。
LC_*的默認(rèn)值,是最低級(jí)別的設(shè)置,如果LC_*沒有設(shè)置,則使用該值。類似于 LC_ALL。
它是一個(gè)宏,如果該值設(shè)置了,則該值會(huì)覆蓋所有LC_*的設(shè)置值。注意,LANG的值不受該宏影響。
設(shè)置前,使用默認(rèn)locale:
[root@db-wanggaofei ~]# 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=
設(shè)置后,使用zh_CN.GDK中文locale:
[root@db-wanggaofei ~]# export LC_ALL=zh_CN.GBK
[root@db-wanggaofei ~]# 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
· 安裝完成locales包后,系統(tǒng)會(huì)自動(dòng)進(jìn)行locale配置,你只要選擇所需的locale,可以多選。最后指定一個(gè)系統(tǒng)默認(rèn)的locale。這樣系統(tǒng)就會(huì)幫你自動(dòng)生成相應(yīng)的locale和配置好系統(tǒng)的locale。
· # 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了,其他可能平時(shí)也用不太多。再參考篇文章,如下,是講如何設(shè)置環(huán)境變量的。
-------------------------------------------
修改 /etc/sysconfig/i18n 文件,如
LANG="en_US.UTF-8&qu
關(guān)鍵詞:LINUX,中文亂碼
閱讀本文后您有什么感想? 已有 人給出評(píng)價(jià)!
- 0
- 0
- 0
- 0
- 0
- 0