日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

060_Unicode字符编码

發布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 060_Unicode字符编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. Unicode字符編碼

1.1. ?Unicode可以被不同的字符集兼容。最常用的編碼方式是UTF-8和UTF-16。

1.2. UTF8中的字符可以是1-4個字節長。UTF-8可以表示Unicode標準中的任意字符。UTF-8向后兼容ASCII。UTF-8是網頁和電子郵件的首選編碼。

1.3. UTF-16: 16比特的Unicode轉換格式是一種Unicode可變字符編碼, 能夠對全部Unicode指令表進行編碼。UTF-16主要被用于操作系統和環境中, 比如微軟的Windows 2000/XP/2003/Vista/CE以及Java和.NET字節代碼環境。

2. Unicode和UTF-8的區別

2.1. Unicode是一個字符集。UTF-8屬于編碼。

2.2. Unicode是具有唯一十進制數字(代碼點)的字符列表。A = 65,B = 66,C = 67,....

2.3. 更簡單點理解就是Unicode是數字和字符的一對一的映射。

2.4. 這個十進制數字表示字符串"hello": 104 101 108 108 111。

2.5. 編碼指的是如何將這些數字轉換成存儲在計算機中的二進制數字:

UTF-8編碼將像這樣存儲"hello"(二進制): 01101000 01100101 01101100 01101100 01101111

2.6. 編碼將數字轉換為二進制。字符集將字符轉換為數字。

3. UTF-8編碼規則

3.1. 如果一個字節, 最高位(第8位)為0, 表示這是一個ASCII字符(00-7F)。可見, 所有ASCII編碼已經是UTF-8了。

3.2. 如果一個字節, 以11開頭, 連續的1的個數暗示這個字符的字節數, 例如: 110xxxxx代表它是雙字節UTF-8字符的首字節。

3.3. 如果一個字節, 以10開始, 表示它不是首字節, 需要向前查找才能得到當前字符的首字節。

4. 下面是Unicode和UTF-8轉換的規則

Unicode字符集

UTF-8編碼

000000~00007F

0xxxxxxx????0是標記位, x是實際值。

000080~0007FF

110xxxxx 10xxxxxx????110和10是標記位, x是實際值。

000800~00FFFF

1110xxxx 10xxxxxx 10xxxxxx????1110和10是標記位, x是實際值。

010000~10FFFF

11110xxx 10xxxxxx 10xxxxxx 10xxxxxx????11110和10是標記位, x是實際值。

5. "漢"的UTF-8編碼和Unicode碼的轉換

5.1. "漢"的UTF-8編碼是0xE6B189。

5.2. E6轉換為二進制1110 0110。

5.3. B1轉換為二進制1011 0001。

5.4. 89轉換為二進制1000 1001。

5.5. 按照三個字節Unicode和UTF-8轉換的規則, 區分標記位和實際值: 1110-0110 10-110001 10-001001。

5.6. 取實際值是: 110110001001001。

5.7. 110110001001001轉換為十六進制是0x6C49, 就是"漢"的Unicode碼值。

6. 的UTF-8編碼和Unicode碼的轉換

6.1. 的UTF-8編碼是0xF0A08081。

6.2. F0轉換為二進制1111 0000。

6.3. A0轉換為二進制1010 0000。

6.4. 80轉換為二進制1000 0000。

6.5. 81轉換為二進制1000 0001。

6.6. 按照四個字節Unicode和UTF-8轉換的規則, 區分標記位和實際值: 11110-000 10-100000 10-000000 10-000001。

6.7. 取實際值是: 100000000000000001

6.8. 100000000000000001轉換為十六進制是0x20001, 就是的Unicode碼值。

7. UTF-16編碼

7.1. Unicode字符集的取值范圍是0x0~0x10FFFF, 超出這個區間UTF-16無法表示。

7.2. 0x0~0xFFFF這段區間, 正好是16位, UTF-16和這個區間的Unicode碼, 一一對應。

7.3. 0x10000~0x10FFFF這段區間, 16位存不下, UTF-16使用32位來存儲。

7.4. 首先看看0x10000~0x10FFFF這段區間有多少個碼位, 0x10FFFF-0x10000+1=0x100000, 這個十六進制數轉換為十進制就是: 1048576個碼位。

7.5. 32位分開前16位和后16位, 每個16位各存一半, 那么每一半存的就是1024(由來:√1048576=1024, 也就是1024*1024=1048576), 1024代表的是2的10次冪, 也就是10位二進制數。這樣就知道了, 32位二進制數字中, 前后16位中各存10位就夠用了。

8. UTF-16使用前6位來區分這16位數字代表的位置

8.1. 54開頭的為32位的前16位。

8.2. 55開頭的為32位的后16位。

8.3. 那么54開頭的數據區間是多少呢, 就是1101 10xx xxxx xxxx, 區間就是D800~DBFF。

8.4. 那么55開頭的數據區間是多少呢, 就是1101 11xx xxxx xxxx, 區間就是DC00~DFFF。

9. 為了配合UTF-16編碼, Unicode字符集也將這兩個區間屏蔽掉, 不允許分配任何字符。

10. Unicode和UTF-16編碼轉換的規則

10.1. D800轉換為二進制1101?1000?0000?0000。

10.2. DC00轉換為二進制1101?1100?0000?0000。

10.3. DBFF轉換為二進制1101?1011?1111?1111。

10.4. DFFF轉換為二進制1101?1111?1111?1111。

10.5. D800區分標記位和實際值: 110110-0000000000。

10.6. DC00區分標記位和實際值: 110111-0000000000。

10.7. DBFF區分標記位和實際值: 110110-1111111111

10.8. DFFF區分標記位和實際值: 110111-1111111111。

10.9. 前16位最小值D800和后16位最小值DC00, 都取實際值是0, 轉換為十六進制是0x0。

10.10. 前16位最大值DBFF和后16位最大值DFFF, 都取實際值是11111111111111111111, 轉換為十六進制是0xFFFFF。

10.11. 0x0~0xFFFFF + 0x10000 = 0x10000~0x10FFFF。

11. 的UTF-16編碼和Unicode碼的轉換

11.1. 的UTF-16編碼是0xD840DC01。

11.2. D8轉換為二進制1101 1000。

11.3. 40轉換為二進制0100 0000。

11.4. DC轉換為二進制1101 1100。

11.5. 01轉換為二進制0000 0001。

11.6. 按照Unicode碼和UTF-16編碼轉換的規則, 區分前16位和后16位的標記位和實際值: 110110-00 01000000 110111-00 00000001。

11.7. 取實際值是: 10000000000000001

11.8. 10000000000000001轉換為十六進制是0x10001, 再加上0x10000, 0x20001就是的Unicode碼值。

總結

以上是生活随笔為你收集整理的060_Unicode字符编码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。