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.