對于文件編碼格式的淺顯理解

字體亂碼這個問題相信大家都遇到過,但是都是間歇性的,不是經常性的,大多時候都沒有太在意。
在遇到過這么多次亂碼之后,特別是在linux下打開windows的文件亂碼,我覺得有必要了解一下編碼方式了。

首先,計算機內部只能存儲二進制數據,即1和0的bit位。所以,我們要讓計算機顯示各種字符,就必須要對字符進行編碼,讓每一個字符對應一個數字編碼。而之所以會造成亂碼現象,是因為當初創建文件的時候采用的編碼方式,和打開時的編碼方式不一樣,這樣的對應關系就亂了,于是我們看到的就是亂七八糟的。

ASCII

計算機是美國人發明的,所以最初的計算機理所應當支持的就是英文字母以及英文里面的各種符號。由于這些字符不怎么多,美國人就提出了ASCII編碼,只用一個字節(byte)表示一個字符。

unicode

隨著計算機的發展,計算機只能顯示英語是絕對不行的,要不然怎么有我現在的這篇文章呢?而并不是所有語言都像英語一樣可以用一個字節表示一個字符(像我大中華便有好幾萬字符),于是各個國家紛紛開始提出自己國家文字的編碼方式。但是世界上這么多國家,這么多語言,要是每個國家都有自己的標準,那一臺計算機上不得有好多種編碼方式啊,這會造成一種混亂。

這時,多語言軟件制造商組成的統一碼(unicode)聯盟出手了,這個組織在1994年正式提出了unicode編碼。正如unicode這個名字,它足以表示世界上所有語言中的字符,現在在世界上被廣泛采用。

ISO/IEC 10646

在“統一”這個方面怎么能少的了ISO這個組織,在unicode聯盟研發unicode時,ISO也在研發用于各種國家之間的編碼方式,ISO定義了UCS(通用字符集),定義了ISO/IEC 10646。ISO和unicode聯盟很快認識到研發兩個不同的統一碼是不必要的,所以他們選擇了合作,于是現在它們從內容上來說是同步一致的。

UTF-8

UTF-8,UTF-16以及UTF-32都是unicode的實現方式
實現方式的理解:unicode編碼使一個字符對應于一個數字編碼,但是在計算機內部不是簡單的存入這個編碼值,這是為了對計算機中的內容進行更好的組織。所以就有了幾種實現方式,將這些數字編碼再映射到計算機內存中的二進制碼。其中UTF-8就是在互聯網的發展,強烈需求下產生的。

中文編碼

在unicode提出之前,我國就已經提出了自己的漢字編碼

  • GB2312 1981年,GB是國標的意思
  • BIG5 1984年臺灣一群人為了解決當時大陸的GB2312沒有覆蓋繁體而提出的
  • GBK 對國標的擴展,向下兼容GB2312,向上支持ISO/IEC 10646
  • GB18030 我國政府于2000年3月17日發布的新的漢字編碼國家標準,2001年8月31日后在中國市場上發布的軟件必須符合本標準。

至于中國為什么使用自己規定的國標碼而不使用unicode,這個問題我沒有找到答案,有知道的在評論區告知一下呢?

亂碼

Linux下默認是UTF-8,而windows可能是GB18030,于是這亂碼就不奇怪了
還有各種奇奇怪怪的亂碼原理都一樣,可以通過轉換編碼的軟件(比如enca)轉文件的編碼格式


大致就是這樣了,這里我說的是編碼方式,有一個概念叫字符集,規定了每個字符對應的編碼,其實就是編碼方式,把一件事搞清楚了就好了,不用糾結文字。
如果哪里寫的不對,請各位大神們指出啊

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容