小生博客:http://xsboke.blog.51cto.com
-------謝謝您的參考,如有疑問,歡迎交流
相信計算機系統編碼問題,讓很多人都頭疼,而且大家經常因爲編碼問題而出現各種各樣的煩惱,那麼我也一樣,在這裏,我將自己的理解寫出來,大家可以參考參考,如果有異議的地方,大家也可以交流一下.
要解決一件事,首先要知道他的今生來世,我們現在就看看關於計算機編碼的今生來世
一、編碼最初的形態,以及出現的問題和原因.
# 最初的形態
因爲語言問題,最初每個幾乎每個國家都有自己的編碼比如:
美國:ASCII 佔1個字節,只支持英文
中國:GB2312 佔2個字節,支持6700+漢字
中國:GBK GB2312的升級版,支持21000+漢字
日本:Shift-JIS 日本字符
韓國:ks_c_5601-1987 韓國編碼
泰國:TIS-620 泰國編碼
# 產生的問題
這樣就產生侷限性了,比如你中國的windows系統默認是GBK編碼,你在text寫了一個"你好",然後把這個text傳給了在美國的朋友,
你美國的朋友用美國的計算機打開這個text就會顯示亂碼.
# 問題產生的原因
原因:硬盤裏面存儲的都是二進制數0101010101111000類似這種,所以你以什麼編碼寫到硬盤的,讀的時候就得用什麼編碼讀.
二、解決編碼最初產生的問題.
這時候就出現了萬國碼unicode,但是因爲unicode涵蓋了幾乎全球所有的文字和二進制的對應關係,所以使用unicode表示一個字符時,
會佔用更多的空間,例如:利用unicode表示"gbk"需要6個字節才能表示,比原來ASCII表示增加了1倍,
爲了解決這個問題,出現了Unicode Transformation Format,學術名UTF:
1. UTF-8: 使用1、2、3、4個字節表示所有字符;優先使用1個字符、無法滿足則使增加一個字節,最多4個 2. 字節。英文佔1個字節、歐洲語系佔2個、東亞佔3個,其它及特殊字符佔4個
3. UTF-16: 使用2、4個字節表示所有字符;優先使用2個字節,否則使用4個字節表示。
4. UTF-32: 使用4個字節表示所有字符;
三、關於轉碼問題.
由於歷史原因,各個國家依然在大量使用自己的編碼,這時候因爲有了utf,所以我們可以通過編碼轉換完成語言的正常顯示,
一個對應關係,讓你更好的理解編碼轉換:
1. 讓以GBK編碼的數據在韓國windows系統中正常顯示
中國編碼GBK -> decode解碼爲unicode -> encode編碼成韓國編碼
2. 讓以韓國編碼的數據在中國windows系統中正常顯示
韓國編碼 -> decode解碼爲unicode -> encode編碼成GBK