代碼單元與代碼點


代碼點指編碼表(比如Unicode)中某個字符的代碼值(數字),書寫時前面加U+,比如U+0041是字母A的代碼點

java中的代碼單元指表示編碼表字符的最小存儲單元,用16位表示

Unicode  U+0041 U+00DF U+6771 U+10400
表示字形
UTF-32 碼單
00000041
000000DF
00006771
00010400
UTF-16 碼單
0041
00DF
6771
D801 DC00
UTF-8 碼單
41
C3 9F
E6 9D B1
F0 90 90 80

增補字符,用兩個代碼單元表示的字符

 
網摘:
代碼點(Code Point)就是指Unicode中為字符分配的編號,一個字符只占一個代碼點,例如我們說到字符“漢”,它的代碼點是U+6C49.代碼單元(Code Unit)則是針對編碼方法而言,它指的是編碼方法中對一個字符編碼以后所占的最小存儲單元。例如UTF-8中,代碼單元是一個字節,因為一個字符可以被編碼為1個,2個或者3個4個字節;在UTF-16中,代碼單元變成了兩個字節(就是一個char),因為一個字符可以被編碼為1個或2個char(你找不到比一個char還小的UTF-16編碼的字符,嘿嘿)。說得再羅嗦一點,一個字符,僅僅對應一個代碼點,但卻可能有多個代碼單元(即可能被編碼為2個char)。
    以上概念絕非學術化的繞口令,這意味着當你想以一種統一的方式指定自己使用什么字符的時候,使用代碼點(即你告訴你的程序,你要用Unicode中的第幾個字符)總是比使用代碼單元更好(因為這樣做的話你還得區分情況,有時候提供一個16進制數字,有時候要提供兩個)。"
 
想找到第i個代碼點,使用下列語句
int index = greeting.offsetByCodePoints(0,i);  //得到0開始便宜i個代碼點的索引值(數字)
int cp = greeting.codePointAt(index);  // 返回char值(unicode對應數字)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM