utf 8是變長編碼,而標準又不使用BOM,那麼它如何解決 避免位元組序問題?

時間 2021-06-07 06:38:07

1樓:Ye Ding

補充一下@fleuria 叔的回答。

簡單地說 utf-8 的處理過程是這樣的:讀入第乙個位元組,該位元組中包含了該Unicode字元總共用幾個位元組編碼的資訊(例如3個位元組),然後根據上述資訊再讀入接下來的位元組(如2個位元組),由此完成乙個字元的解碼,以此類推。因此整個Unicode檔案對解碼器來說只是乙個位元組(8bit)流,所以不涉及位元組序的問題。

其實這從utf-8這個名字中就可以看出來,因為它使用8bit來編碼unicode code point。相應地,utf-16和utf-32也是如此(自然也就有了位元組序的問題),至於為什麼utf-16不是嚴格的16bit,這就涉及歷史問題了。因為人們最初制定unicode的時候,比較樂觀地認為16bit就足夠表示人類所有字元了,所以ucs-2(utf-16的原型)編碼和unicode code point的值是直接對應的,但是後來發現65535還是不夠用,於是utf-16為了相容性不得不變得很複雜了。

Unicode其實涉及到兩個概念:code point 和 encoding,推薦可以看一下這篇文章:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)

Matlab如何以UTF 8編碼儲存?

李四 matlab 2020a版本支援多種編碼的原始檔,儲存 另存為.選擇你需要的檔案編碼即可.其他版本的我沒試.但就是不支援,用window下的記事本另存為想要的編碼,然後回到matlab裡繼續工作應該也可以吧. 子懿 我使用的是2014a版本,也是修改lcdata.xml檔案,但是和網上的都不太...

為什麼要有UTF 8的疑問

Steven Wang 1.相容ASCII 2.任何乙個byte漏傳,多傳,傳錯只影響當前字元,前後字元都不受影響。byte stream從某個字元編碼的中間截斷不會導致後續字元解碼出錯。3.類似哈夫曼編碼,越常用的字元處在編碼長度越短的編碼平面上。起到一定的壓縮作用。 倪好 最主要的目的是相容as...

java中GBK編碼格式轉成UTF8,用一段方法實現怎麼做?

曲品品 jdk裡的粘過來 String byte bytes 通過使用平台的預設字符集解碼指定的 byte 陣列,構造乙個新的 String。String byte bytes,Charset charset 通過使用指定的 charset 解碼指定的 byte陣列,構造乙個新的 String。by...