3 回答

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個贊
根據(jù)RFC3629,每個字符的最大字節(jié)數(shù)為4,該字符將字符表限制為U+10FFFF:
在UTF-8中,使用1到4個八位位組的序列對U + 0000..U + 10FFFF范圍(UTF-16可訪問范圍)中的字符進(jìn)行編碼。
(原始規(guī)范允許對過去的代碼點(diǎn)最多使用六個字節(jié)的字符代碼U+10FFFF。)
代碼少于128個字符的字符僅需要1個字節(jié),接下來的1920個字符代碼僅需要2個字節(jié)。除非您使用的是深奧的語言,否則將字符數(shù)乘以4將是一個明顯的高估。

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超10個贊
如果沒有進(jìn)一步的上下文,我想說的是,UTF-8中字符的最大字節(jié)數(shù)為
答案:6個字節(jié)
接受的答案的作者正確地指出這是“原始規(guī)范”。這通過RFC-2279 1是有效的。正如J. Cocoe在下面的評論中指出的那樣,此情況在2003年通過RFC-3629 2進(jìn)行了更改,RFC-3629 2將UTF-8的編碼范圍限制為21位,可以使用四個字節(jié)的編碼方案進(jìn)行處理。
如果覆蓋所有unicode,則回答:4個字節(jié)
但是,在Java <= v7中,他們談?wù)撌褂肬TF-8表示unicode的最大3字節(jié)嗎?這是因?yàn)樵紆nicode規(guī)范僅定義了基本的多語言平面(BMP),即它是unicode的較舊版本,或者是現(xiàn)代unicode的子集。所以
如果僅代表原始unicode,則回答B(yǎng)MP:3個字節(jié)
但是,OP談?wù)摰氖橇肀賕oing徑。不是從字符到UTF-8字節(jié),而是從UTF-8字節(jié)到字節(jié)表示的“字符串”。也許接受的答案的作者是從問題的上下文中得出的,但這不一定是顯而易見的,因此可能使對此問題的普通讀者感到困惑。
從UTF-8到本地編碼,我們必須研究如何實(shí)現(xiàn)“字符串”。某些語言(例如Python> = 3)將使用整數(shù)代碼點(diǎn)表示每個字符,這會導(dǎo)致每個字符4個字節(jié)= 32位,以覆蓋我們需要的unicode所需要的21位,但有些浪費(fèi)。為什么不完全是21位?因?yàn)樽止?jié)對齊時事情會更快。諸如Python <= 2和Java之類的某些語言使用UTF-16編碼表示字符,這意味著它們必須使用代理對來表示擴(kuò)展的Unicode(不是BMP)。無論哪種方式,最大長度仍為4個字節(jié)。
如果要使用UTF-8,請回答->本機(jī)編碼:4個字節(jié)
因此,最終結(jié)論4是最常見的正確答案,因此我們正確了。但是,里程可能會有所不同。

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超10個贊
沒有分配超過10FFFF(剛好超過一百萬)限制的代碼點(diǎn),并且許多UTF8實(shí)現(xiàn)從未實(shí)現(xiàn)超過4個字節(jié)的序列(并且只有3個,例如MySQL),所以我認(rèn)為將每個限制硬限制為4個字節(jié)是安全的即使考慮與較早實(shí)現(xiàn)的兼容性,也可以使用codepoint。您只需要確保在途中丟棄任何無效的東西即可。請注意,在可能的情況下,matiu建議在計算出精確的字節(jié)長度后進(jìn)行分配。
添加回答
舉報