2012-05-04 26 views
4

如果我將字符é寫入文件,並用十六進制編輯器打開它,我可以看到字節0xC3,0xA9。爲什麼UTF-8中的字符編碼爲0xC3 0xA9?

來自維基百科,第一個字節叫做前導字節,第二個叫尾隨字節。 0xC3它是一個元數據字節,表示它用1個字節0xA9編碼的字符,但é的unicode值爲0xE9

我基本上想知道爲什麼é它是用0xA9而不是0xE9編碼的。文本編輯器如何從0xC3A9轉換爲0xE9?任何換班操作?

回答

12

是什麼讓你認爲0xC3是「元數據字節」?

每個使用UTF-8的字節都包含有關編碼代碼點的相關信息。

一個UTF-8編碼的碼點的第一個字節中含有一個標記(領先的1的數)表示的字節用來碼點編碼(*)前幾個實際的比特的總數碼點。所有尾隨字節包含一個「連續標記」(比特10)和6個更多的編碼碼位。

關於UTF-8的維基百科文章有a pretty good description of the process

有直接使用的碼點值的編碼:UTF-32(又名UCS-4),它基本上是「使用碼點值作爲32位值」

(*)標記實際上是非常容易:如果字節開頭(即它的最高有效位是)0,那麼它是一個單字節編碼(即0到127之間的一個編碼點)。如果它以10開頭,那麼它是一個連續字節。如果是110,111011110那麼它分別是2,3或4字節序列的開始。 1111101111110也被用於定義,但在現代UTF-8中不再有效(因爲這些僅用於編碼在Unicode標準中永遠不會使用的值)。

+0

那麼爲什麼在UTF-8中字符'é'編碼爲0xC3 0xA9? –

+0

http://stackoverflow.com/a/4177813/107158說明如何將UTF-8字節0xC3A9映射到字符「é」。 –

相關問題