linux 文件 字符集设置,Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解...
博文說明【前言】:
本文將通過個人口吻介紹Linux字符集和系統(tǒng)語言設(shè)置,包括LANG,locale,LC_ALL,POSIX等命令及參數(shù)詳解的相關(guān)知識,在目前時間點【2017年6月21號】下,所掌握的技術(shù)水平有限,可能會存在不少知識理解不夠深入或全面,望大家指出問題共同交流,在后續(xù)工作及學習中如發(fā)現(xiàn)本文內(nèi)容與實際情況有所偏差,將會完善該博文內(nèi)容。
本文參考文獻引用鏈接:
1、http://blog.csdn.net/z4213489/article/details/7937894【好文,必看】
2、http://www.360doc.com/content/14/0103/13/10384031_342301450.shtml【各種格式區(qū)別講解的比比較詳細,必看】
正文:
一:字符集部分
字符集就是:01二進制數(shù)據(jù)字符的對應關(guān)系表(也可以稱為對應關(guān)系數(shù)據(jù)庫,對應關(guān)系集合)
示例:
假設(shè)這是utf8字符集對應關(guān)系:
00010101----例
10101100----如
假設(shè)這是GBK字符集對應關(guān)系:
00010101----亂
10101100----碼
講解:
我們可以很清楚的看到,相同一段數(shù)據(jù),使用不同的字符集,會有不同的顯示結(jié)果,這就是我們亂碼現(xiàn)象的根源,因為不同字符集組織數(shù)據(jù)的方式不一樣。
ps:瀏覽器展示網(wǎng)頁時,網(wǎng)頁內(nèi)容使用字符集如果和系統(tǒng)字符集不一致,一般也不會發(fā)生亂碼現(xiàn)象(英文的windows系統(tǒng)能正常看中文頁面),因為瀏覽器在獲取網(wǎng)頁文件時,瀏覽器會做一個判斷,識別網(wǎng)頁內(nèi)容使用的字符集,然后使用相對應字符集去顯示頁面內(nèi)容,注意,前提是你操作系統(tǒng)中要有這些字符集存在。
補充知識-字體:
字體:文字渲染效果,同樣的一個字,會有:宋體、黑體、仿宋、隸書、楷書、微軟雅黑等等效果,字體建立在字符集基礎(chǔ)之上。但每個字體庫可能不會包含某個字符集全部的字體,有些時候會顯示不完全。
總結(jié):
語言是建立在字符集的基礎(chǔ)之上的,比如我們的系統(tǒng)使用中文語言,這就是說,有以下幾點
1、寫:我們輸入的漢字要能在計算機中能以漢字字符集的格式進行組織保存并傳輸。
2、看:網(wǎng)絡遠端傳輸過來的數(shù)據(jù)(二進制數(shù)據(jù)),我計算機收到之后,需要能展示出漢字字體(此時就要用到這個對應關(guān)系表)
總結(jié)來說,在中文環(huán)境中就是:看中文,寫中文(重點在此),傳中文。
Linux中字符集文件存放位置: /usr/share/i18n/charmaps
二:系統(tǒng)語言設(shè)置-locale部分
1、什么是locale
在Linux中,它使用locale命令來設(shè)置和顯示程序運行的語言環(huán)境(也就是系統(tǒng)運行語言環(huán)境,應用進程是在系統(tǒng)的進程之上運行的,應用程序的父進程是init進程)
locale的英文直譯為場所,地區(qū),地域,但它在Linux中含義要更大,在Linux中Locale根據(jù)計算機用戶所使用的語言,所在國家或者地區(qū),以及當?shù)氐奈幕瘋鹘y(tǒng)定義一個軟件運行時的語言環(huán)境 。
locale的主要作用是描述某一個地域內(nèi)的人們的語言習慣和文化傳統(tǒng)和生活習慣。一個地區(qū)的locale就是根據(jù)幾大類的習慣(變量)定義的。
2、locale的命名規(guī)則
locale 命名規(guī)則:_.
例如:
zh_CN.utf8
zh_CN.utf8,zh代表中文,CN代表大陸地區(qū),utf8表示字符集。
de_DE.UTF-8@euro
de表示德語,DE表示德國,UTF-8表示字符集,euro表示按照歐洲習慣加以修正
這個命令規(guī)則就是說我們在設(shè)置locale的相關(guān)變量時,都是使用這種格式給變量進行賦值
3、locale命令及參數(shù)講解
設(shè)置Locale的根本其實就是設(shè)置一組總共12個LC開頭的變量(不包括LANG和LC_ALL)Linux中l(wèi)ocale文件存放位置: /usr/share/i18n/locales
示例:
weblogic@YDCK-APP11:~/.ssh> locale
LANG=zh_CN.utf8
LC_CTYPE="zh_CN.utf8"
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=
講解:
LANG??????????????????????? #LANG的優(yōu)先級是最低的,它是所有LC_*變量的默認值。下方所有以LC_開頭變量(不包括LC_ALL)中,如果存在沒有設(shè)置變量值的變量,那么系統(tǒng)將會使用LANG的變量值來給這個變量進行賦值。如果變量有值,則保持不變,不受影響。可以看到,我們上面示例中的輸出中的LC_*變量的值其實就是LANG變量決定的
LC_CTYPE?????????????????? #用于字符分類和字符串處理,控制所有字符的處理方式,包括字符編碼,字符是單字節(jié)還是多字節(jié),如何打印等,這個變量是最重要的。
LC_NUMERIC ? ? ? ? ? ? ?#用于格式化非貨幣的數(shù)字顯示。
LC_TIME????????????????????? #用于格式化時間和日期。
LC_COLLATE ? ? ? ? ? ? ? ?#用于比較和排序。
LC_MONETORY ? ? ? ? ? #用于格式化貨幣單位。
LC_MESSAGES ? ? ? ? ? ? #用于控制程序輸出時所使用的語言,主要是提示信息,錯誤信息,狀態(tài)信息, 標題,標簽, 按鈕和菜單等。
LC_PAPER ? ? ? ? ? ? ? ? ? ? #默認紙張尺寸大小
LC_NAME???????????????????? #姓名書寫方式
LC_ADDRESS??????????????? #地址書寫方式
LC_TELEPHONE????????????#電話號碼書寫方式
LC_MEASUREMENT ? ? #度量衡表達方式
LC_IDENTIFICATION ? ?#locale對自身包含信息的概述
LC_ALL? ? ? ? ? ? ? ? ? ? ? ? ?#它不是環(huán)境變量,它是一個宏,可通過該變量的設(shè)置覆蓋所有的LC_*變量。這個變量設(shè)置之后,可以廢除LC_*的設(shè)置值,使得這些變量的設(shè)置值與LC_ALL的值一致,注意,LANG變量不受影響。
宏:可能會有人對宏沒概念,簡單說明下,我們在計算機領(lǐng)域說的宏(Macro),是批量處理的一個說法。宏是一種通過某種指定規(guī)則來處理數(shù)據(jù)的過程,可以稱之為語法替換(大家應該在編輯器里匹配替換過數(shù)據(jù),但這這里要復雜點),這里不同數(shù)據(jù)替換,宏是獲取某種輸入(通常是字符串),然后如何根據(jù)事先定義的規(guī)則,轉(zhuǎn)換成對應的輸出(通常也是字符串)。真實的宏要比這里說的復雜,有興趣可以自行查資料。
在這里,我們這個宏操作就是用LC_ALL的值去覆蓋LC_*的變量值
格式化:上面的含義講到格式化,可能會有人不太清楚,格式化就是重新設(shè)定組織數(shù)據(jù)的規(guī)則,拿我們?nèi)粘I钆e例子,我們要記錄一段數(shù)據(jù),我們可以記在方格紙上,可以記在橫格紙上,可以記在白紙上等等,這里的這種的紙張格式就是組織數(shù)據(jù)的一種方式,不同格式,記錄方式和數(shù)據(jù)量等都不一樣,我們在Windows系統(tǒng)中,經(jīng)常做的格式化優(yōu)盤操作就是這樣,可以把自帶的FAT32格式,重新格式化定義為NTFS格式,你可以理解為,將優(yōu)盤的記錄數(shù)據(jù)從方格紙方式變成橫格紙方式。
優(yōu)先級級別:LC_ALL>LC_*>LANG
注意:定義這么多變量在某些情況下是很有用的,例如,當我需要一個能夠輸入中文的英文環(huán)境,我可以把 LC_CTYPE設(shè)定成zh_CN.GB18030,而其他所有的項都是en_US.UTF-8。
總結(jié):LANG是LC_*的默認值,而LC_ALL比LC_*的優(yōu)先級都高,設(shè)置完LC_ALL之后,會強制重置LC_*的值,如果不將LC_ALL的值重置為空,則無法再去設(shè)置LC_*的值
補充:一般來說,我們在新裝系統(tǒng)之后,我們的變量的值將會是下面這種情況:
NTP-slave:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
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=
講解:C是系統(tǒng)默認的locale,而POSIX是C的別名,這是標準的C Locale。它所指定的屬性和行為由ISO C標準所指定。當我們新安裝完一個系統(tǒng)時,默認的locale就是C或POSIX。
我們這里說的C其實就是ASCII編碼。
POSIX:可移植操作系統(tǒng)接口(Portable Operating System Interface of UNIX,縮寫為 POSIX ),POSIX標準定義了操作系統(tǒng)應該為應用程序提供的接口標準,是IEEE為要在各種UNIX操作系統(tǒng)上運行的軟件而定義的一系列API標準的總稱,其正式稱呼為IEEE 1003,而國際標準名稱為ISO/IEC 9945。
換句話說,為一個POSIX兼容的操作系統(tǒng)編寫的程序,可以在任何其它的POSIX操作系統(tǒng)(即使是來自另一個廠商)上編譯執(zhí)行。
總結(jié):POSIX是一種類UNIX系統(tǒng)的通用接口標準,基于這個標準開發(fā)的程序,能夠靈活的遷移到不同版本系統(tǒng)上使用。
在這里,locale中的POSIX說的就是一種業(yè)內(nèi)統(tǒng)一的默認locale標準,不區(qū)分地域,所有Linux發(fā)行版本都支持。
4、常用命令:
1、查看當前l(fā)ocale設(shè)置
# locale
NTP-slave:~ # locale
LANG=zh_CN.utf8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="zh_CN.utf8"
LC_TIME="zh_CN.utf8"
LC_COLLATE="zh_CN.utf8"
LC_MONETARY="zh_CN.utf8"
LC_MESSAGES="zh_CN.utf8"
LC_PAPER="zh_CN.utf8"
LC_NAME="zh_CN.utf8"
LC_ADDRESS="zh_CN.utf8"
LC_TELEPHONE="zh_CN.utf8"
LC_MEASUREMENT="zh_CN.utf8"
LC_IDENTIFICATION="zh_CN.utf8"
LC_ALL=
2、查看當前系統(tǒng)的所有可用locale
# locale -a
3、設(shè)置系統(tǒng)的locale(此處以zh_CN.utf8為例)
1)編輯文件:/etc/profie,在文件末尾添加以下內(nèi)容并報錯退出
#vim /etc/profile
export LC_ALL=zh_CN.utf8
export LANG=zh_CN.utf8
2)執(zhí)行生效命令:
#source /etc/profile
結(jié)尾:
感謝閱讀,祝有收獲的一天,謝謝!
總結(jié)
以上是生活随笔為你收集整理的linux 文件 字符集设置,Linux字符集和系统语言设置-LANG,locale,LC_ALL,POSIX等命令及参数详解...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: laravel log 对象_swool
- 下一篇: 体育测试数据绘图软件,原创健身运动体育测