你真的知道你看到的UTF-8字符是什麼嗎?

翻譯自http://www.pixelstech.net/article/1397877200-You-know-what-UTF-8-is-when-you-see-it-

Source : sonic0002

如有版權問題請告知.

在編碼的時候我們經常會看到UTF-8, GB 2312之類的字樣. 可你真的瞭解這些編碼的意義嗎? 我們爲什麼需要這些編碼呢? 在這篇文章裏,  Julián Solórzano 將會給我們介紹世界上使用範圍最廣/包含所有不同字符集的編碼規則.

UTF-8是一種Unicode字符的編碼方式, 它使用8個bit. Unicode是一種用來對不同語言中大多數字符進行編碼的標準.

大約40年前, ASCII誕生了. 原始的ASCII包含128個字符, 包括大小寫英文, 數字和標點符號, 每個字符使用7個bit編碼.

隨後出現了"拓展ASCII", 它使用8個bit來包含更多的字符, 比如 á, é, ü. 對於這額外的128個字符空位, 出現了許多不同的代碼映射集. 比如latin1, windows-1252等等(對於這128個額外字符, 沒有固定的對應表, 取決於種族語言和操作系統等).

很明顯128(7bit)或256(8bit)個字符空位對於同時代表衆多字符都是不夠的. 因此Unicode作爲一個可以代表幾乎所有文字系統的標準被提出了. 目前它包含超過1000,000個字符(code point). UTF-8 是一種用來編碼這些字符的方式. 在UTF-8中的一個字符可以由1個或更多字節(byte)組成. 前128個字符和ASCII碼是一樣的. 之後的字符就使用超過1個字節來進行編碼. 一個獨立字符中的每個字節都以一個特殊的位順序開頭來表示此字節和前一個字節描述的是同一個字符.

Table from Wikipedia:

比如, á是一個Unicode字符編碼, U+00E1, 或者 225(十進制)


225的二進制是11100001.

因爲需要8個bit來表示這個數字(225), 因此在UTF-8中我們需要使用2個字節來對它進行編碼(原ASCII表中的前128個字符才使用1個字節, 它們只用7個bit). 所以, 使用第一張表作爲參考, 我們可以把這個字符編碼成:

11000011 10100001

粗體部分是數字225, 非粗體的是編碼必須的模式.

因此, 如果你打開了一個包含字節c3 a1的文本文件, 並且程序認爲編碼格式是UTF-8, 你就會看到 á.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章