2011-02-13 101 views
3

你可以計算一個UTF16編碼代表1,120,064數字,按permuations/commbinations?UTF16字符總數

+0

請展開:因爲它沒有任何意義。 – Richard 2011-02-13 12:27:55

+0

至於UTF-8,已知代表2^31個可能的字符。我在考慮是否應用公式來計算可能的UTF-16字符數。 – user4344 2011-02-13 12:30:54

回答

3

Unicode標準是3.9節說:

每個編碼格式映射Unicode碼點U + 0000..U + D7FF和U + E000..U + 10FFFF轉換爲唯一的代碼單元序列。

因此的碼點( '字符'),其可以由UTF-16表示的數目是

0xD7FF + 1 + (0x10FFFF - 0xE000) + 1 = 1 112 064 

Unicode標準通常的32位是。但是,特定的編碼會保留較小的位數,以表示最常見的字符對它們可以合法表示的字符的實際數量施加特定的限制。爲了允許更長的比特序列反過來允許描述比8(UTF-8)或16(UTF-16)比特特殊代理點更長的描述碼點。

此外,能夠代表給定編碼中給定的代碼點並不意味着它是有效的 - 它必須首先由UNICODE標準進行分配和描述。因此,沒有數學公式可以產生可以表示的字符數,數字1 112 064並不一定意味着有1M個有效字符。

有關詳細討論,請參見UNICODE標準的section 3.9

3

不可以。用UTF-16表示的字符數只能通過規範知道,而不能通過數學知道。 UTF-16是人們制定的一組特定的編碼規則,而不是某些公式的固有屬性。

1

看到這裏https://stackoverflow.com/questions/280182/

答案這幾乎是作爲規範好,好,它結合了一些規範。我會引用:

UTF-16是一個可變長度的代碼;其字符消耗2或4個字節。 0xD800-0xDFFF範圍內的2字節值保留用於構造4字節字符,並且所有4字節字符由範圍爲0xD800-0xDBFF的兩個字節組成,後面跟着2個字節,範圍爲0xDC00-0xDFFF。因此,Unicode不會在U + D800-U + DFFF範圍內分配任何字符。

容量UTF-16的:1112064

1

您可以在UTF-16中表示1112064標量值,因爲標準的3.9節定義D76定義了1112064個標量值,並且由於UTF-16編碼形式(如所有Unicode編碼形式)是唯一的表示所有Unicode標量值,如定義D79中所定義。

D76 - Unicode標值:除了高代理和低代理代碼點任何Unicode代碼點。

  • 作爲該定義的結果,Unicode標量值的集合由範圍0到D7FF和E000到10FFFF(含)組成。

D79 - 甲Unicode編碼形式給每個Unicode標值一個唯一的編碼單元序列。

當然,由於在定義D91中規定了代理對編碼機制,這些數字並不完全是任意的。給定表3-5中的位分佈,就沒有辦法對高於10FFFF的標量值進行編碼。

1

有三種UTF-16代碼單元:

  • 高的替代物(U + D800到U + DBFF)。這些有1024個。
  • 低代用品(U + DC00至U + DFFF)。這些有1024個。
  • BMP中可直接表示的字符。這些有65536-2 * 1024 = 63488。

有1024×1024 = 1,048,576可以通過代理(「補充字符」U + 10000到U + 10FFFF)來表示。在BMP中添加63,488個可表示字符並獲得1,112,064。