2012-01-04 48 views
6

爲什麼學位符號與UTF-8不同於unicode?爲什麼學位符號與unicode的UTF-8不同?

據:http://www.utf8-chartable.de/http://www.fileformat.info/info/unicode/char/b0/index.htm

unicode是B0但UTF-8是C2 B0怎麼來的?

+0

在UTF-8和UTF-16之間有數千個字符表示不同。什麼使你相信學位標誌值得特別待遇? – 2012-01-04 18:38:31

+5

您需要了解Unicode及其各種編碼之間的差異。閱讀人們發佈的鏈接。 – tripleee 2012-01-04 18:43:21

+0

@MikeNakis:我相信*所有* Unicode代碼點在UTF-8和UTF-16中有不同的表示形式。 – 2013-03-07 18:25:33

回答

15

UTF-8是一種使用可變字節數(字節數取決於代碼點)來編碼UTF字符的方法。 U + 0080和U + 07FF之間

代碼點使用下面2個字節的encoding

110xxxxx 10xxxxxx 

其中x表示的代碼點的比特被編碼。

讓我們來考慮U + 00B0。在二進制,0XB0是10110000.如果一個替代位到上面的模板,得到:

11000010 10110000 

十六進制表示,這是爲0xC2 0XB0。

+1

而且,至關重要的是,這只是對同一個Unicode代碼點U + 00B0的不同表示。 UTF-16使用0x00 0xB0(big-endian)或0xB0 0x00(little-endian),但UTF-8使用0xC2 0xB0(無endianness)。 – 2012-01-04 18:42:50

+0

您提供的鏈接是非常有用的......謝謝 – 2012-01-04 21:08:33

+0

@JonathanLeffler「無端」不正確的術語,但有趣 – 2017-11-09 01:41:47

4

Unicode(UTF-16和UTF-32)對該字符使用代碼點0x00B0。 UTF-8不允許127以上的字符(0x007F),因爲每個字節的高位被保留以指示該特定字符實際上是多字節字符。

基本的7位ASCII直接映射到UTF-8的前128個字符。必須通過設置高位並添加1個或多個額外的字節來描述任何值大於127十進制(7F十六進制)的字符。

4

UTF-8是Unicode的一種編碼。 UTF-16和UTF-32是Unicode的其他編碼。

Unicode爲每個字符定義了一個數字值;度數符號碰巧是0xB0或十進制的176。 Unicode沒有定義如何表示這些數字值。

UTF-8將值0xB0編碼爲值爲0xC2 0xB0的兩個連續八位位組(字節)。

根據字節順序,UTF-16對0x00 0xB00xBo 0x00編碼相同的值。

UTF-32將其編碼爲0x00 0x00 0x00 0xB00xB0 0x00 0x00 0x00,同樣取決於字節順序(我認爲其他順序也是可能的)。

1

NPE,Marc和Keith的答案很好,超出了我對這個主題的認識。儘管如此,在我意識到這是關於什麼之前,我不得不閱讀它們幾次。然後我看到這個網頁,它使我「點擊」。

http://www.utf8-chartable.de/,你可以看到如下:

UTF-8 needs C2 80 to represent U+0080

注意它是如何需要使用兩個字節的代碼一個字符。現在閱讀NPE接受的答案。

+0

如果用戶無法看到該網站,它顯示0x7F(DELETE)爲UTF-8: '7F'和'0x80' 作爲UTF-8:'C2 80' – 2017-11-09 01:44:41

相關問題