Unicode 和 UTF-8 的關系和區別


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

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

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


---------------------
作者:lvzhanbin
來源:CSDN
原文:https://blog.csdn.net/lvzhanbin/article/details/78151633
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM