字體亂碼這個(gè)問題相信大家都遇到過铅忿,但是都是間歇性的剪决,不是經(jīng)常性的,大多時(shí)候都沒有太在意檀训。
在遇到過這么多次亂碼之后柑潦,特別是在linux下打開windows的文件亂碼,我覺得有必要了解一下編碼方式了峻凫。
首先渗鬼,計(jì)算機(jī)內(nèi)部只能存儲(chǔ)二進(jìn)制數(shù)據(jù),即1和0的bit位荧琼。所以譬胎,我們要讓計(jì)算機(jī)顯示各種字符,就必須要對(duì)字符進(jìn)行編碼命锄,讓每一個(gè)字符對(duì)應(yīng)一個(gè)數(shù)字編碼堰乔。而之所以會(huì)造成亂碼現(xiàn)象,是因?yàn)楫?dāng)初創(chuàng)建文件的時(shí)候采用的編碼方式累舷,和打開時(shí)的編碼方式不一樣浩考,這樣的對(duì)應(yīng)關(guān)系就亂了,于是我們看到的就是亂七八糟的被盈。
ASCII
計(jì)算機(jī)是美國人發(fā)明的析孽,所以最初的計(jì)算機(jī)理所應(yīng)當(dāng)支持的就是英文字母以及英文里面的各種符號(hào)。由于這些字符不怎么多只怎,美國人就提出了ASCII編碼袜瞬,只用一個(gè)字節(jié)(byte)表示一個(gè)字符。
unicode
隨著計(jì)算機(jī)的發(fā)展身堡,計(jì)算機(jī)只能顯示英語是絕對(duì)不行的邓尤,要不然怎么有我現(xiàn)在的這篇文章呢?而并不是所有語言都像英語一樣可以用一個(gè)字節(jié)表示一個(gè)字符(像我大中華便有好幾萬字符),于是各個(gè)國家紛紛開始提出自己國家文字的編碼方式汞扎。但是世界上這么多國家季稳,這么多語言,要是每個(gè)國家都有自己的標(biāo)準(zhǔn)澈魄,那一臺(tái)計(jì)算機(jī)上不得有好多種編碼方式啊景鼠,這會(huì)造成一種混亂。
這時(shí)痹扇,多語言軟件制造商組成的統(tǒng)一碼(unicode)聯(lián)盟出手了铛漓,這個(gè)組織在1994年正式提出了unicode編碼。正如unicode這個(gè)名字鲫构,它足以表示世界上所有語言中的字符浓恶,現(xiàn)在在世界上被廣泛采用。
ISO/IEC 10646
在“統(tǒng)一”這個(gè)方面怎么能少的了ISO這個(gè)組織结笨,在unicode聯(lián)盟研發(fā)unicode時(shí)包晰,ISO也在研發(fā)用于各種國家之間的編碼方式,ISO定義了UCS(通用字符集)禀梳,定義了ISO/IEC 10646杜窄。ISO和unicode聯(lián)盟很快認(rèn)識(shí)到研發(fā)兩個(gè)不同的統(tǒng)一碼是不必要的肠骆,所以他們選擇了合作算途,于是現(xiàn)在它們從內(nèi)容上來說是同步一致的。
UTF-8
UTF-8,UTF-16以及UTF-32都是unicode的實(shí)現(xiàn)方式蚀腿。
對(duì)實(shí)現(xiàn)方式的理解:unicode編碼使一個(gè)字符對(duì)應(yīng)于一個(gè)數(shù)字編碼嘴瓤,但是在計(jì)算機(jī)內(nèi)部不是簡(jiǎn)單的存入這個(gè)編碼值,這是為了對(duì)計(jì)算機(jī)中的內(nèi)容進(jìn)行更好的組織莉钙。所以就有了幾種實(shí)現(xiàn)方式廓脆,將這些數(shù)字編碼再映射到計(jì)算機(jī)內(nèi)存中的二進(jìn)制碼。其中UTF-8就是在互聯(lián)網(wǎng)的發(fā)展磁玉,強(qiáng)烈需求下產(chǎn)生的停忿。
中文編碼
在unicode提出之前,我國就已經(jīng)提出了自己的漢字編碼
- GB2312 1981年蚊伞,GB是國標(biāo)的意思
- BIG5 1984年臺(tái)灣一群人為了解決當(dāng)時(shí)大陸的GB2312沒有覆蓋繁體而提出的
- GBK 對(duì)國標(biāo)的擴(kuò)展席赂,向下兼容GB2312,向上支持ISO/IEC 10646
- GB18030 我國政府于2000年3月17日發(fā)布的新的漢字編碼國家標(biāo)準(zhǔn),2001年8月31日后在中國市場(chǎng)上發(fā)布的軟件必須符合本標(biāo)準(zhǔn)时迫。
至于中國為什么使用自己規(guī)定的國標(biāo)碼而不使用unicode颅停,這個(gè)問題我沒有找到答案,有知道的在評(píng)論區(qū)告知一下呢掠拳?
亂碼
Linux下默認(rèn)是UTF-8癞揉,而windows可能是GB18030,于是這亂碼就不奇怪了
還有各種奇奇怪怪的亂碼原理都一樣,可以通過轉(zhuǎn)換編碼的軟件(比如enca)轉(zhuǎn)文件的編碼格式
大致就是這樣了喊熟,這里我說的是編碼方式柏肪,有一個(gè)概念叫字符集,規(guī)定了每個(gè)字符對(duì)應(yīng)的編碼芥牌,其實(shí)就是編碼方式预吆,把一件事搞清楚了就好了,不用糾結(jié)文字胳泉。
如果哪里寫的不對(duì)拐叉,請(qǐng)各位大神們指出啊