Linux下perldoc亂碼延伸至LANG,LC_ALL,locale探討

brightking716發表於2010-08-05

Linux下用perldoc命令檢視的時候出現亂碼

# perldoc Test::Builder

如果出現這種問題,還會出現在其他的Linux命令,man,info

而我的Linux作業系統是英文的,設定的locale: LANG= en_US.UTF-8

出現這種情況,應該是編碼格式的問題,可以再profile檔案中設定

$ vi .bash_profile

alias man='LANG=C man'

C代表英文環境 ASCII 編碼格

[@more@]

Locale:

Locale是根據計算機使用者所使用的語言,所在國家或者地區,以及當地的文化傳統所定義的一個軟體執行時的語言環境。

這個使用者環境可以按照所涉及到的文化傳統的各個方面分成幾個大類,通常包括使用者所使用的語言符號及其分類(LC_CTYPE),數字 (LC_NUMERIC),比較和排序習慣(LC_COLLATE),時間顯示格式(LC_TIME),貨幣單位(LC_MONETARY),資訊主要是 提示資訊,錯誤資訊, 狀態資訊, 標題, 標籤, 按鈕和選單等(LC_MESSAGES),姓名書寫方式(LC_NAME),地址書寫方式 (LC_ADDRESS),電話號碼書寫方式 (LC_TELEPHONE),度量衡表達方式(LC_MEASUREMENT),預設紙張尺寸大小 (LC_PAPER)locale對自身包含資訊的概述(LC_IDENTIFICATION)

character set

字符集(character set)就是字元,尤其是非英語字元在系統內的編碼方式,也就是通常所說的內碼,所有的字符集都放在 /usr/share/i18n/charmaps,所有的字符集也都是用Unicode編號索引的。

Locale 是軟體在執行時的語言環境, 它包括語言(Language), 地域 (Territory) 和字符集(Codeset)。一個locale的書寫格式為: 語言[_地域[.字符集]]. 所以說呢,locale總是和一定的字符集相聯絡的。

例如
zh_CN.GB2312是指:
語言為中文,身處中華人民共和國,使用國標2312字符集來表達字元。 zh_CN.GB2312=中文_中華人民共和國+國標2312字符集。

設定locale就是設定12大類的locale分類屬性,即12LC_*。除了這12個變數可以設定以外,為了簡便起見,還有兩個變數:LC_ALLLANG它們之間有一個優先順序的關係:LC_ALL > LC_* >LANG可以這麼說,LC_ALL是最上級設定或者強制設定,而LANG是預設設定值。

另外LANGLANGUAGE有什麼區別呢?

LANG - Specifies the default locale for all unset locale variables
LANGUAGE - Most programs use this for the language of its interface
LANGUAGE
是設定應用程式的介面語言。而LANG是優先順序很低的一個變數,它指定所有與locale有關的變數的預設值

Reference:

http://hi.baidu.com/edeed/blog/item/2e99a14440bd8884b2b7dcb1.html

http://blog.chinaunix.net/u2/60913/showart_1161340.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12472709/viewspace-1036189/,如需轉載,請註明出處,否則將追究法律責任。

相關文章