字符编码常识
基本常識:
1.位和字節
位:(bit),計算機里存放的二進制的值(0/1)。
字節:(byte),一個字節由8位組成。8個位的組合有256個組合方式,其值范圍:“00000000-11111111”,常用16進制來表示。
通常所說的字符編碼,就是指定義一套規則,將真實世界里的字母、字符與計算機二進制序列進行相互轉化。
2.編碼標準
(1) 拉丁編碼(適用于美國,歐洲)
<1> ASCII編碼
只支持基礎拉丁字母。設計:用1個字節來表示1個字符。且最高位為0,表示字符含義的只有7位,所以可表達的字符只有128個。(適合美國人)
<2>?EASCII編碼
到西歐的時候,發現美國人設計的ASCII編碼無法滿足,所以將一個字節中的最高位也利用了起來,可表達的字符256個。
<3>?ISO 8859
雖然西歐使用256個字符能滿足自身使用了,但是北歐、東歐還是不夠,所以就出現了ISO 8859。
不是單獨的字符集編碼,而是一整套。從ISO 8859-(1-16)沒有12,每個字符集對應不同的區域的編碼。兼容ASCII的。
以上這三種編碼都是單字節編碼,一個字符對應一個字節。
(2)中文編碼:
但是對于字符集更大的中文來說,并不合適。(大概有8w左右),所以需要多個字節來表示一個字符的編碼規則。
GB2312編碼:國家簡體字符集,用兩個字節表示一個漢字。同樣還兼容ASCII編碼規則。
(3) Unicode 編碼:全世界字符統一編碼規則
Unicode 采用4字節來表示一個字符,理論上,能表示的字符數就達到2的31次,21億左右的字符。
但是這樣一來,對于中文和拉丁字母就會形成一種浪費。另外如何讓計算機區分是Unicode編碼還是其他編碼也是需要考慮的問題。
<1>UTF-8編碼:Unicode編碼的一種實現。Unicode是統一編碼標準規范。
編碼規則:
- 規則1:對于單字節字符,字節的第一位為0,后7位為這個符號的Unicode碼,所以對于拉丁字母,UTF-8與ASCII碼是一致的。
- 規則2:對于n字節(n>1)的字符,第一個字節前n位都設為1,第n+1位為0,后面字節的前兩位一律設為10,剩下沒有提及的位,全部為這個符號的Unicode編碼
如圖:
UTF-8 與GBK和GB2312并不完全兼容。也就是說不能通過何種方式進行轉換。只能通過查表的形式來轉換。
UTF-8下的中文占3個字節或4個字節,并不固定。
?
3.UTF-8 的BOM
Bom是微軟給UTF-8加上的,用于表示文件使用的是UTF-8編碼。即在UTF-8編碼的文件起始位置,加入三個字節“EE BB BF”。
標準并不推薦。
?
參照:
http://blog.jobbole.com/76376/
https://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/
轉載于:https://www.cnblogs.com/solverpeng/p/5617942.html
總結
- 上一篇: 《入门经典》——6.24
- 下一篇: 关于MySQL的各种总结