關于Unicode和UTF-8

說到編碼,得先從ASCII編碼講起。ASCII編碼是由美國人發(fā)明,美國的字符不超過255個,所以ASCII編碼使用了8bit 即一個字節(jié)來存儲字符。由于漢字的數量遠超255個,所以中國自己發(fā)明了一個GB2312編碼來表示漢字,一般的漢字使用2個字節(jié),對于一些生僻的漢字則使用更多的字節(jié)來表示,當然,GB2313編碼是可以兼容ASCII碼的。

然后,日本,韓國等等國家也自己發(fā)明了一套編碼方法,這時候又出現了一個新的問題。如果一篇文章里面,即有中文,又有日文的話,無論使用中文的編碼方法還是使用日文的編碼方法都會出現亂碼。隨后,unicode編碼便應運而生。unicode編碼對文字的編碼進行了統(tǒng)一,當然,unicode只是一種編碼規(guī)范,它有多個版本,常用的unicode編碼使用了16位來存儲字符,16位的存儲空間足以容納世界上所有書面字符(對于漢字來說,一共有6萬多個,只能包含其中的一些常用漢字,所以unicode編碼對于漢字的兼容性并不是特別好)。unicode編碼兼容了ASCII碼,ASCII碼轉unicode編碼時,保持后8位不變,前8位只需要用0去補全即可。

使用了unicode編碼后,又有新的問題出現。因為unicode編碼是用兩個字節(jié)來存儲字符,如果一篇文章中,大部分都是英文,使用unicode編碼就會造成空間的浪費,對英文部分使用ASCII碼只需要一個字節(jié)就可以了。這時候,utf-8解決了這個問題。utf-8是一種可變長的字符編碼,當存儲英文時只使用一個字節(jié),節(jié)省了一半的空間,而存儲中文字符時,長度還是不變。utf-8雖然壓縮了存儲空間,但是如果在內存中存儲,使用utf-8卻由于它的長度不固定,帶來了很大的不便,使得在內存處理字符變得復雜。應對這個問題的解決策略是:在內存中存儲字符時還是使用unicode編碼,因為unicode編碼的長度固定,處理起來很方便。而在文件的存儲中,則使用utf-8編碼,可以壓縮內存,節(jié)省空間。這里一般有個自動轉換的機制,即從文件中讀取utf-8編碼到內存時,會自動轉換為unicode編碼,而從內存中將字符保存到文件時,則自動轉換為utf-8編碼。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容