回覆列表
  • 1 # rrepn37027

    unicode,中文叫萬國碼,統一碼,是統一碼聯盟為了世界上大多數文字系統進行整理和編碼。 unicode2.0後基本和ISO 10646規範保持一致. 和unicode類似,iso組織也在做同樣的事情,iso開展了 ISO/IEC 10646專案,名字叫“ Universal Multiple-Octet Coded Character Set”,簡稱UCS。 後來,雙方意識到時間上不需要2套通用的字符集,所以雙方開始進行整合,到unicode2.0時,unicode的編碼和ucs的編碼都基本一致。unicode在編碼上和UCS保持一致,在實現上有自己的規則,而UCS只定義了編碼標準。unicode的實現形式上 有UTF-8,UTF-16,UTF-32,還有UTF-7等。UCS編碼也有自己的格式:UCS-2和UCS-4等等。可參考各自wiki:unicode 和ucs unicode的編碼可以和UCS-2和UCS-4保持一致。但是又略有不同。UTF-16是UCS-2的擴充套件,UTF-32是UCS-4的子集。也就是說,UTF-16的實現上對code point的支援範圍超過UCS-2,而UTF-32對code point的表示卻又在UCS-4的範圍之內。在編碼層面上,UCS-2就是用兩個位元組編碼,UCS-4就是用4個位元組(實際上只用了31位,最高位必須為0)編碼。 UCS-2有2^16=65536個碼位,UCS-4有2^31=2147483648個碼位。 UCS-4根據最高位為0的最高位元組分成2^7=128個group。每個group再根據次高位元組分為256個plane。每個plane根據第3個位元組分為256行 (rows),每行包含256個cells。當然同一行的cells只是最後一個位元組不同,其餘都相同。 group 0的plane 0被稱作Basic Multilingual Plane, 即BMP。或者說UCS-4中,高兩個位元組為0的碼位被稱作BMP。 將UCS-4的BMP去掉前面的兩個零位元組就得到了UCS-2。在UCS-2的兩個位元組前加上兩個零位元組,就得到了UCS-4的BMP。而目前的UCS-4規範中還沒有任何字元被分配在BMP之外。Unicode最初支援16位的code point,後來發現不夠用,於是用UTF-16擴充套件UCS-2。在BMP區域內的一片連續空間(U+D800~U+DFFF)的碼位區段是永久保留不對映到字元,因此UTF-16利用保留下來的0xD800-0xDFFF區段的碼位來對輔助平面的字元的碼位進行編碼。具體演算法參考wiki:utf-16 .所以,utf-16能表示的範圍最大能到U+10FFFF,包含1個基本平面(BMP)和16個輔助平面。理論上UCS-4編碼範圍能達到U+7FFFFFFF,但是因為unicode和iso達成共識,只會用17個平面內的字元,所以UTF-32是UCS-4的子集。但是UTF-16是定長的編碼,和UCS-4無論實現和編碼都是基本一樣的。 當前,Unicode深入人心,且UTF-8大行其道,UCS編碼基本被等同於UTF-16,UTF-32了,所以目前UCS基本談出人們的視野中。(Windows NT用的就是UCS-2)

  • 中秋節和大豐收的關聯?
  • 卸妝時有哪些誤區?