今天把Windows上的文件傳到Linux上叽躯,通過cat打開后花鹅,出現(xiàn)亂碼疙赠,如下圖
出現(xiàn)亂碼的原因是由于兩個操作系統(tǒng)對中文的壓縮方式不同旁理,Linux下使用的是utf8樊零,而Windows使用的是.gbbk,因此Windows下正常顯示的文件再Linux中打開出現(xiàn)亂碼孽文。
解決方法一:
在Linux終端輸入: ? iconv -f gbk -t utf8 PythonStudy.txt > Python.txt.utf8
在當(dāng)前目錄下就生成了一個.utf8格式的文件驻襟,打開該文件,正常顯示芋哭,如下圖
解決方法二:
切換至root用戶沉衣,用vim打開vimrc文件 ??
vim /etc/vimrc
在文件的末尾加入以下內(nèi)容:
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set encoding=prc
保存退出,再使用vim打開就可以識別gb2312的中文文件
但是使用cat等打開仍然亂碼
解決方法三:
用記事本打開文件减牺,點擊另存為豌习,在下方的編碼方式中選擇utf-8方式
那么多種編碼格式存谎,有些理不清,那就再來看看字符編碼方式的發(fā)展歷程吧
字符編碼發(fā)展史
1肥隆、最開始既荚,計算機由8個晶體管表示狀態(tài),可表示的范圍為0 - 256栋艳,稱其為“字節(jié)”
2恰聘、計算機誕生于美國,他們把編號從0開始的32種狀態(tài)分別規(guī)定了特殊的用途嘱巾,稱為“控制碼”憨琳,如00×10, 換行;把所有的空格旬昭、標(biāo)點符號篙螟、數(shù)字、大小寫字母分別用連續(xù)的字節(jié)狀態(tài)表示问拘,一直編到了第127號遍略,這樣就能用不同的字節(jié)來存儲英語的文字了。大家把這套方案叫做Ascii編碼
3骤坐、計算機迅速的發(fā)展绪杏,世界各地開始使用計算機,但是很多國家不是用的英文纽绍,他們的字母很多是ASCII碼中沒有的蕾久,因此用127后面的空位來表示這些新的字母,符號等拌夏,從128到255這一頁的字符集被稱”擴展字符集”
4僧著、中國人得到計算機時,已經(jīng)沒有可以利用的字節(jié)狀態(tài)來表示漢字障簿,于是中國人毫不客氣的把127后面的奇異符號直接取消盹愚,并規(guī)定:一個小于127的字符的意義與原來相同,但兩個大于127的字符連在一起時站故,就表示一個漢字皆怕,前面的一個字節(jié)(他稱之為高字節(jié))從0xA1用到 0xF7,后面一個字節(jié)(低字節(jié))從0xA1到0xFE西篓,這樣我們就可以組合出大約7000多個簡體漢字了愈腾。在這些編碼里,我們還把數(shù)學(xué)符號岂津、羅馬希臘的字母顶滩、日文的假名們都編進去了,連在 ASCII 里本來就有的數(shù)字寸爆、標(biāo)點礁鲁、字母都統(tǒng)統(tǒng)重新編了兩個字節(jié)長的編碼,這就是常說的”全角”字符赁豆,而原來在127號以下的那些就叫”半角”字符了仅醇。
中國人民把這種漢字方案叫做 “GB2312″。GB2312 是對 ASCII 的中文擴展魔种。
5析二、中國的漢字太多了,還是有很多人的名字沒辦法打出來节预,于是干脆不再要求低字節(jié)一定是127號之后的內(nèi)碼叶摄,只要第一個字節(jié)是大于127就固定表示這是一個漢字的開始,不管后面跟的是不是擴展字符集里的內(nèi)容安拟。結(jié)果擴展之后的編碼方案被稱為 GBK 標(biāo)準蛤吓,GBK 包括了 GB2312 的所有內(nèi)容,同時又增加了近20000個新的漢字(包括繁體字)和符號
6糠赦、少數(shù)名族也開始用電腦了会傲,于是再擴展,又加了幾千個新的少數(shù)民族的字拙泽,GBK 擴成了GB18030
7淌山、各個國家都像中國這樣搞出一套自己的編碼標(biāo)準,結(jié)果互相之間誰也不懂誰的編碼顾瞻,誰也不支持別人的編碼泼疑。這時候,ISO(國際標(biāo)準化組織)開始著手解決這個問題荷荤。他們的方法很簡單:廢了所有的地區(qū)性編碼方案退渗,重新搞一個包括了地球上所有文化、所有字母和符號的編碼梅猿!即UNICODE氓辣。UNICODE 包持其原編碼不變,只是將其長度由原來的8位擴展為16位袱蚓,而其他文化和語言的字符則全部重新統(tǒng)一編碼钞啸。
8、由于”半角”英文符號只需要用到低8位喇潘,所以其高 8位永遠是0体斩,因此這種大氣的方案在保存英文文本時會多浪費一倍的空間。為了解決這個問題颖低,UTF-8出現(xiàn)了絮吵,這是一種針對Unicode的可變長度字符編碼。UTF-8的編碼規(guī)則很簡單忱屑,只有二條:
a蹬敲、對于單字節(jié)的符號暇昂,字節(jié)的第一位設(shè)為0,后面7位為這個符號的unicode碼伴嗡。因此對于英語字母急波,UTF-8編碼和ASCII碼是相同的;
b瘪校、對于n字節(jié)的符號(n>1)澄暮,第一個字節(jié)的前n位都設(shè)為1,第n+1位設(shè)為0阱扬,后面字節(jié)的前兩位一律設(shè)為10泣懊。剩下的沒有提及的二進制位,全部為這個符號的unicode碼麻惶。
因此大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續(xù)工作馍刮,utf-8被普遍使用
參考:
blog.chinaunix.net/uid-27177626-id-3496705.html
blog.csdn.net/wwwdongzi/article/details/17002839