回答
ASCII只使用8位字節的前7位。所以從00000000
到01111111
的所有組合。該範圍內的所有128個字節都映射到特定字符。
UTF-8保留這些確切的映射。 ASCII碼01101011
代表的字符也用UTF-8中的相同字節表示。所有其他字符都以多個字節的序列進行編碼,其中每個字節具有最高位集;即UTF-8中所有非ASCII字符的每個字節的形式爲1xxxxxxx
。
你能解釋一下,如果僅支持ASCII文件的應用程序讀取UTF8文件會發生什麼情況。具體來說,它在讀取0041(十六進制)的第一個字節時應該做些什麼。 –
「0041」究竟是什麼意思? Unicode字符U + 0041?字節序列「0x00 0x41」?如果前者是UTF-8編碼的後者「A」,與ASCII **相同,那麼根本沒有問題。如果是後者,那將是一個'NUL'字節,後跟「A」,它與ASCII在UTF-8中相同。我認爲你還沒有完全明白這一點,我建議你閱讀[絕對的程序員,積極需要了解編碼和字符集以處理文本](http://kunststube.net/encoding/) 。 – deceze
@deceze,感謝您的鏈接!我將在稍後閱讀。 – rstackhouse
爲什麼:
因爲一切都已經在ASCII和有一個向後兼容Unicode格式製作採用容易得多。將程序轉換爲使用UTF-8比將其轉換爲UTF-16要容易得多,並且該程序繼續使用ASCII向後兼容的特性。
如何:
ASCII是一個7位編碼,但始終存儲在字節,這是8比特。這意味着1位一直未被使用。
UTF-8只是使用該額外位來表示非ASCII字符。
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具有用於多字節編碼的代碼。
「請注意,它只是與Unicode和UTF-8兼容的7位ASCII字符集」:您應該刪除對Unicode的提及,或者您必須在此上下文中定義「兼容」的含義 – Raffi
- 1. python-scrapinghub,ascii/utf8?
- 2. 解壓UTF8到ASCII
- 3. 爲ASCII爲什麼哈希結果不同,當應用UTF8功能
- 4. utf8與UTF-8對比UTF8與UTF-8有什麼不同?
- 5. 爲什麼request.remote_ip.encoding是ASCII-8BIT?
- 6. 將擴展ascii轉換爲utf8
- 7. 無法從UTF8轉換爲ASCII
- 8. 從UTF8轉換爲Java中的ASCII
- 9. 轉換ASCII JSON爲utf8在python
- 10. UTF8 GetBytes()與非ASCII符號的奇怪行爲
- 11. 轉換ASCII到UTF8編碼
- 12. 從UTF8到ASCII的轉換
- 13. Apache編碼ascii到utf8
- 14. 爲什麼爲字符串(ASCII)值
- 15. 爲什麼CFStringEncodings在Swift中沒有UTF8?
- 16. Unicode與ASCII有什麼不同?
- 17. 爲什麼文本框中的符號與ascii表有不同的ascii值
- 18. 爲什麼char的Convert.ToInt32返回ascii碼?
- 19. 爲什麼python json.dumps抱怨ascii解碼?
- 20. 爲什麼非ASCII字符不相等?
- 21. 爲什麼ASCII以大寫命名?
- 22. 爲什麼US-ASCII編碼接受非US-ASCII字符?
- 23. 與ASCII表示的UTF8編碼十六進制值
- 24. PHP輸入過濾 - 檢查ascii與檢查utf8
- 25. MySQL UTF8/ASCII/ISO編碼問題
- 26. Codename One - UTF8源碼非ASCII錯誤
- 27. 用UTF8文本POST自帶ASCII
- 28. 在utf8中設置ascii const類
- 29. 爲什麼將ADODB.Stream與ASCII字符集特殊字符作爲ä轉換爲?
- 30. 什麼是ASCII 17-20?
任何以ASCII編碼的文本文件都可以解碼爲UTF-8,以得到完全相同的結果。 – Esailija