2013-04-12 182 views
4
兼容

A UTF-8是U+0041 LATIN CAPITAL LETTER A。 ASCII中的A065爲什麼utf8與ascii

UTF-8如何向後兼容ASCII?

+1

任何以ASCII編碼的文本文件都可以解碼爲UTF-8,以得到完全相同的結果。 – Esailija

回答

13

ASCII只使用8位字節的前7位。所以從0000000001111111的所有組合。該範圍內的所有128個字節都映射到特定字符。

UTF-8保留這些確切的映射。 ASCII碼01101011代表的字符也用UTF-8中的相同字節表示。所有其他字符都以多個字節的序列進行編碼,其中每個字節具有最高位集;即UTF-8中所有非ASCII字符的每個字節的形式爲1xxxxxxx

+0

你能解釋一下,如果僅支持ASCII文件的應用程序讀取UTF8文件會發生什麼情況。具體來說,它在讀取0041(十六進制)的第一個字節時應該做些什麼。 –

+3

「0041」究竟是什麼意思? Unicode字符U + 0041?字節序列「0x00 0x41」?如果前者是UTF-8編碼的後者「A」,與ASCII **相同​​,那麼根本沒有問題。如果是後者,那將是一個'NUL'字節,後跟「A」,它與ASCII在UTF-8中相同。我認爲你還沒有完全明白這一點,我建議你閱讀[絕對的程序員,積極需要了解編碼和字符集以處理文本](http://kunststube.net/encoding/) 。 – deceze

+0

@deceze,感謝您的鏈接!我將在稍後閱讀。 – rstackhouse

2

爲什麼:

因爲一切都已經在ASCII和有一個向後兼容Unicode格式製作採用容易得多。將程序轉換爲使用UTF-8比將其轉換爲UTF-16要容易得多,並且該程序繼續使用ASCII向後兼容的特性。

如何:

ASCII是一個7位編碼,但始終存儲在字節,這是8比特。這意味着1位一直未被使用。

UTF-8只是使用該額外位來表示非ASCII字符。

2

Unicode向後兼容ASCII,因爲ASCII是Unicode的子集。 Unicode只是使用ASCII中的所有字符代碼並添加更多。

雖然字符代碼通常寫出爲0041以Unicode,字符代碼是數字,以便0041是相同的值(十六進制)41.

UTF-8是不是一個字符集但使用的編碼Unicode格式。它恰巧也與ASCII兼容,因爲用於多字節編碼的代碼位於未使用的ASCII字符集的一部分中。

請注意,它只是與Unicode和UTF-8兼容的7位ASCII字符集,基於ASCII的8位字符集(如IBM850和Windows-1250)使用字符集的部分位置UTF-8具有用於多字節編碼的代碼。

+0

「請注意,它只是與Unicode和UTF-8兼容的7位ASCII字符集」:您應該刪除對Unicode的提及,或者您必須在此上下文中定義「兼容」的含義 – Raffi