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