utf-8 vs utf-16

8月 30, 2022 |

java 内部使用utf16,每个字符占用2个字节, \uD800~DFFF 这个区间是作用surrogate pair, 目前使用是\uD800和\uDC00 这一对。
编码也很直接, 如果不能用两个字节表示, 那么就使用4个字节,编码-0x10000 10位截一段, 分别拼接到高位和低位的surrogate pair后面

emoji 💩 编码1F4A9

utf-16
减去0x10000 = F4A9, 二进制:1111,0100,1010,1001
按10位截开(1111,01 |00,1010,1001 ), 分别加上0xD8, 0xDC

1101,1000, 0011,1101, 1101,1100,1010,1001 = d83ddca9

utf-8
二进制: 00|01,1111,|0100,10|10,1001 ,每段拼接到对应的标识位后面

1111,0000 f0
1001,1111 9f
1001,0010 92
1010,1001 a9

Posted in: java基础

Comments are closed.