Linux下查看txt文件出現(xiàn)亂碼

今天把Windows上的文件傳到Linux上,通過(guò)cat打開(kāi)后,出現(xiàn)亂碼,如下圖

出現(xiàn)亂碼的原因是由于兩個(gè)操作系統(tǒng)對(duì)中文的壓縮方式不同,Linux下使用的是utf8,而Windows使用的是.gbbk,因此Windows下正常顯示的文件再Linux中打開(kāi)出現(xiàn)亂碼。

解決方法一:

在Linux終端輸入: ? iconv -f gbk -t utf8 PythonStudy.txt > Python.txt.utf8

在當(dāng)前目錄下就生成了一個(gè).utf8格式的文件,打開(kāi)該文件,正常顯示,如下圖

解決方法二:

切換至root用戶,用vim打開(kāi)vimrc文件 ??

vim /etc/vimrc

在文件的末尾加入以下內(nèi)容:

set fileencodings=utf-8,gb2312,gbk,gb18030

set termencoding=utf-8

set fileformats=unix

set encoding=prc

保存退出,再使用vim打開(kāi)就可以識(shí)別gb2312的中文文件

但是使用cat等打開(kāi)仍然亂碼

解決方法三:

用記事本打開(kāi)文件,點(diǎn)擊另存為,在下方的編碼方式中選擇utf-8方式


那么多種編碼格式,有些理不清,那就再來(lái)看看字符編碼方式的發(fā)展歷程吧

字符編碼發(fā)展史

1、最開(kāi)始,計(jì)算機(jī)由8個(gè)晶體管表示狀態(tài),可表示的范圍為0 - 256,稱其為“字節(jié)”

2、計(jì)算機(jī)誕生于美國(guó),他們把編號(hào)從0開(kāi)始的32種狀態(tài)分別規(guī)定了特殊的用途,稱為“控制碼”,如00×10, 換行;把所有的空格、標(biāo)點(diǎn)符號(hào)、數(shù)字、大小寫(xiě)字母分別用連續(xù)的字節(jié)狀態(tài)表示,一直編到了第127號(hào),這樣就能用不同的字節(jié)來(lái)存儲(chǔ)英語(yǔ)的文字了。大家把這套方案叫做Ascii編碼

3、計(jì)算機(jī)迅速的發(fā)展,世界各地開(kāi)始使用計(jì)算機(jī),但是很多國(guó)家不是用的英文,他們的字母很多是ASCII碼中沒(méi)有的,因此用127后面的空位來(lái)表示這些新的字母,符號(hào)等,從128到255這一頁(yè)的字符集被稱”擴(kuò)展字符集”

4、中國(guó)人得到計(jì)算機(jī)時(shí),已經(jīng)沒(méi)有可以利用的字節(jié)狀態(tài)來(lái)表示漢字,于是中國(guó)人毫不客氣的把127后面的奇異符號(hào)直接取消,并規(guī)定:一個(gè)小于127的字符的意義與原來(lái)相同,但兩個(gè)大于127的字符連在一起時(shí),就表示一個(gè)漢字,前面的一個(gè)字節(jié)(他稱之為高字節(jié))從0xA1用到 0xF7,后面一個(gè)字節(jié)(低字節(jié))從0xA1到0xFE,這樣我們就可以組合出大約7000多個(gè)簡(jiǎn)體漢字了。在這些編碼里,我們還把數(shù)學(xué)符號(hào)、羅馬希臘的字母、日文的假名們都編進(jìn)去了,連在 ASCII 里本來(lái)就有的數(shù)字、標(biāo)點(diǎn)、字母都統(tǒng)統(tǒng)重新編了兩個(gè)字節(jié)長(zhǎng)的編碼,這就是常說(shuō)的”全角”字符,而原來(lái)在127號(hào)以下的那些就叫”半角”字符了。

中國(guó)人民把這種漢字方案叫做 “GB2312″。GB2312 是對(duì) ASCII 的中文擴(kuò)展。

5、中國(guó)的漢字太多了,還是有很多人的名字沒(méi)辦法打出來(lái),于是干脆不再要求低字節(jié)一定是127號(hào)之后的內(nèi)碼,只要第一個(gè)字節(jié)是大于127就固定表示這是一個(gè)漢字的開(kāi)始,不管后面跟的是不是擴(kuò)展字符集里的內(nèi)容。結(jié)果擴(kuò)展之后的編碼方案被稱為 GBK 標(biāo)準(zhǔn),GBK 包括了 GB2312 的所有內(nèi)容,同時(shí)又增加了近20000個(gè)新的漢字(包括繁體字)和符號(hào)

6、少數(shù)名族也開(kāi)始用電腦了,于是再擴(kuò)展,又加了幾千個(gè)新的少數(shù)民族的字,GBK 擴(kuò)成了GB18030

7、各個(gè)國(guó)家都像中國(guó)這樣搞出一套自己的編碼標(biāo)準(zhǔn),結(jié)果互相之間誰(shuí)也不懂誰(shuí)的編碼,誰(shuí)也不支持別人的編碼。這時(shí)候,ISO(國(guó)際標(biāo)準(zhǔn)化組織)開(kāi)始著手解決這個(gè)問(wèn)題。他們的方法很簡(jiǎn)單:廢了所有的地區(qū)性編碼方案,重新搞一個(gè)包括了地球上所有文化、所有字母和符號(hào)的編碼!即UNICODE。UNICODE 包持其原編碼不變,只是將其長(zhǎng)度由原來(lái)的8位擴(kuò)展為16位,而其他文化和語(yǔ)言的字符則全部重新統(tǒng)一編碼。

8、由于”半角”英文符號(hào)只需要用到低8位,所以其高 8位永遠(yuǎn)是0,因此這種大氣的方案在保存英文文本時(shí)會(huì)多浪費(fèi)一倍的空間。為了解決這個(gè)問(wèn)題,UTF-8出現(xiàn)了,這是一種針對(duì)Unicode的可變長(zhǎng)度字符編碼。UTF-8的編碼規(guī)則很簡(jiǎn)單,只有二條:

a、對(duì)于單字節(jié)的符號(hào),字節(jié)的第一位設(shè)為0,后面7位為這個(gè)符號(hào)的unicode碼。因此對(duì)于英語(yǔ)字母,UTF-8編碼和ASCII碼是相同的;

b、對(duì)于n字節(jié)的符號(hào)(n>1),第一個(gè)字節(jié)的前n位都設(shè)為1,第n+1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒(méi)有提及的二進(jìn)制位,全部為這個(gè)符號(hào)的unicode碼。

因此大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續(xù)工作,utf-8被普遍使用



參考:

blog.chinaunix.net/uid-27177626-id-3496705.html

blog.csdn.net/wwwdongzi/article/details/17002839

blog.chinaunix.net/uid-26790551-id-3203316.html

www.zhihu.com/question/23374078/answer/134244691

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 可以看我的博客 lmwen.top 或者訂閱我的公眾號(hào) 簡(jiǎn)介有稍微接觸python的人就會(huì)知道,python中...
    ayuLiao閱讀 3,400評(píng)論 1 5
  • 雖然不是第一個(gè)馬拉松,但明天開(kāi)始的這個(gè)半程比賽仍然是目前為止最期待也最緊張的一個(gè)。因?yàn)樗龑⑹俏宜?jīng)歷的第一個(gè)越野跑...
    白大炮閱讀 433評(píng)論 0 0
  • 人生若只如初見(jiàn) 只是,美好終究有限 不同的選擇會(huì)造就不同的人生 未曾謀面 卻毫不猶豫跟著他走 她和他 在最美好的時(shí)...
    讀書(shū)少的絲瓜閱讀 579評(píng)論 0 3
  • 我不是一個(gè)喜歡看電影,更很少去電影院的一個(gè)人,但當(dāng)我即將離開(kāi)這座城市的時(shí)候,我今天第一次一個(gè)人去了電影院,看的是體...
    川上的日子閱讀 553評(píng)論 18 4
  • 生辰三十二載,而立有瑕,疵兩點(diǎn)。 己者,可為敢為一絲執(zhí)念而心存來(lái)生者,如若更律己以寬人之便,終必善惡琳瑯。 家人,...
    德知我姓閱讀 217評(píng)論 1 5

友情鏈接更多精彩內(nèi)容