将代码点(unicode)转换为UTF-16并用java打印
我是基于这篇文章的将代码点(unicode)转换为UTF-16并用java打印,unicode,utf-16,Unicode,Utf 16,我是基于这篇文章的 我举了一个例子: 六边形: 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 \uD83E\uDDF0 但是在 正确值为: 六: \uD87E \uDDF0 \u
我举了一个例子: 六边形:
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
\uD83E\uDDF0
但是在
正确值为:
六:
\uD87E \uDDF0
\uD83E\uDDF0
二进制:
1101 1000 0011 1110 1101 1101 1111 0000
所以
我有一个位放错了,我不明白为什么…转换
0x1F9F0
(0001 1111 1001 1111 0000
)
从您发布的文章中,我们关注以下部分:
对于从U+010000到U+10FFFF的unicode码点
第一步,你可能错过了:
首先,从代码点减去0x010000,得到一个范围为0x000000到0x0FFFFF的20位数字
也就是说,0x0F9F0
(0000 1111 1001 1111 0000
)
UTF-16将这些范围划分为两个存储桶0xD800…0xDBFF和0xDC00…0xDFFF(我们称它们为A和B),其中每个存储桶有10个自由位和6个固定位(图中以灰色显示)
或者,正如您已经发布的:110110x10xxxxxxxxx
和110111xx XXXX
我们在减法后得到的20位数字,现在被分成两部分,每部分10位。前10位用于填充A的10个自由位,而剩余10位用于填充B的10个自由位
导致
1101 1000 0011 1110
和1101 1101 1111 00000
或0xD83E 0xDDF0
。发布您的代码。如果不向我们展示您的代码,很难看出您做错了什么。@guy,@dawood ibn kareem没有代码。如果你想编码,应该是:static void main(String[]args){System.out.println(“\uD83E\uDDF0”);}
True,我的错误是我读错了U+010000到U+10FFFF的unicode码点的,而不是读:读到U+010000到U+10FFF的unicode码点的,