因為資料是二進位制表示的,現在存在各種各樣的編碼,因為計算機識別的編碼與資料本身的編碼不一致,就會造成亂碼。
ascii
美國規定的128個字元表示的二進位制表示方法,這種方法稱為ascii碼,計算機儲存的最小單位是位元組(8位),ascii碼的後7位表示字元本身,最高位設定為0,後7位0~127表示128個字元,ascii碼對美國夠用了,但是對其他國家其他字元遠遠不夠。
iso 8859-1
西歐編碼,這種編碼也是乙個位元組表示乙個字元,前127位與ascii碼一樣,128到255表示其他的西歐字元。後來推出的windows-1252就是在其基礎上增加了一些數字表示列印字元,一般都用windows-1252來解析了。
gb2312
主要基於7000個漢字的字元編碼,不包括繁體字和特殊字,它用兩個位元組表示字元,最高位為1,表示漢字。如果最高位是0,則表示ascii碼。
gbk是在gb2312的基礎上增加到21000個漢字,相容了繁體字。同樣用兩個位元組表示。
gb18030
gb18030再gbk的基礎上增加到了76000個字元,相容了少數民族字元和日韓字元,兩個位元組的長度已經不能滿足這種編碼需求了,所以長度增加到4個位元組。
big5
針對台灣和香港的繁體字符集。
亂碼是怎樣產生的呢?
如果乙個檔案的字元編碼是windows-1252,如果用gb18030的編碼格式來解析的話,就會出現亂碼的現象。所以用正確的編碼格式編碼就可以了。
unicode
編碼跟其他編碼不一樣,unicode編碼給世界上所有的字元都制定了統一的編號,包括110多w,所以可以通過給字元找到對應的unicode編碼來找到它真正表示的字元含義,把unicode編碼對應到二級製表中就用到了utf-32, utf-16和utf-8。
utf-32用字元二進位制的完整表示,就是4個位元組,因為會造成空間浪費。
utf-16使用變長自己表示,可能為兩個自己可能為4個位元組,常用語系統內部編碼,比utf-32節省了空間。
utf-8就是使用變長位元組表示,每個字元使用的位元組個數與其unicode編號的大小有關,編號小的使用的位元組就少,編號大的使用的位元組就多,使用的位元組個數從1到4個不等。utf-8字元編碼相容ascii碼,乙個字元一般用3分位元組表示。
所以可以通過unicode編碼實現各種編碼的轉換,從a編碼轉換到b編碼,可先根據a編碼格式找到a對應的對映表找到對應的unicode在通過對映表找到b的編碼格式。
字元編碼 知識總結
工作中經常遇到中文亂碼的問題,由於歷史的原因,工作中經常遇到檔案編碼不一致的情況。老員工之前使用的是gbk編碼,新來的拿到之前的 用utf8編碼開啟,就會出現亂碼,我就經常遇到這樣的情況。不同系統間傳遞檔案也會出現亂碼的情況,比如蘋果系統開啟windows系統的檔案,也會有亂碼。今天來學習一下計算機...
字元編碼及檔案讀取的基礎知識
這是以前寫的一點筆記,把它轉過來。1 二進位制檔案和文字檔案 首先看二段 生成乙個二進位制檔案和乙個文字檔案。開啟乙個二進位制檔案 test.dat,寫入整數 1234 其對應的十六進製制為 04 d2。file pfile int ntest 1234 if null pfile fopen te...
Python基礎知識之字元編碼與轉碼
python直譯器在載入.py檔案中的 時,會對內容進行編碼 預設ascii ascii american standard code for information interchange,美國標準資訊交換 是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多只能用8位來表...