我基于这篇文章 https://kishuagarwal.github.io/unicode.html
我举了一个例子:UTF-16 code point 0x1F9F0
在六:
0x1F9F0
以二进制形式:
0001 1111 1001 1111 0000
不允许文章中的解释, 我应该有这样的东西吗?
1101 10XX XXXX XXXX 1101 11XX XXXX XXXX
从do代码点填充的位,请给我
二进制:
1101 1000 0111 1110 1101 1101 1111 0000
六:
\uD87E \uDDF0
但是在this page中 正确的值是:
六:
\uD83E\uDDF0
二进制:
1101 1000 0011 1110 1101 1101 1111 0000
所以...
my hexa: \uD87E \uDDF0
correct hexa: \uD83E \uDDF0
我错位了,我不知道为什么...
答案 0 :(得分:1)
转换0x1F9F0
(0001 1111 1001 1111 0000
)
在您发布的文章中,我们遵循以下部分:
对于从U + 010000到U + 10FFFF的Unicode代码点,...
以及您可能错过的第一步:
首先从代码点中减去0x010000,为我们提供了一个20位数字,范围为0x000000到0x0FFFFF。
即0x0F9F0
(0000 1111 1001 1111 0000
)
UTF-16将这些范围划分为两个存储区0xD800 ... 0xDBFF和0xDC00 ... 0xDFFF(我们将它们称为A和B),其中每个存储区都有10个空闲位和6个固定位(在图中以灰色显示) 。
或者,如您已经发布的:1101 10XX XXXX XXXX
和1101 11XX XXXX XXXX
我们将求和后得到的20位数字分成两部分,每部分10位。前10位用于填充A的10个空闲位,而其余10位用于填充B的10个空闲位。
产生1101 1000 0011 1110
和1101 1101 1111 00000
或0xD83E 0xDDF0
-如预期。