【发布时间】:2020-02-01 02:30:59
【问题描述】:
我对将 unicode 字符代码点转换为 UTF-16 有点困惑,我正在寻找能以最简单的方式向我解释的人。
对于像“????”这样的字符我们得到;
d801dc8c --> UTF-16
0001048c --> UTF-32
f090928c --> UTF-8
66700 --> Decimal Value
所以,UTF-16 十六进制值转换为“11011000 00000001 11011100 10001100”,即十进制值“3624000652”,所以我的问题是我们如何得到这个十六进制值?以及我们如何将其转换回“66700”的真实代码点。 ???
UTF-32 十六进制值转换为“00000000 0000001 00000100 10001100”,即十进制为“66700”,但 UTF-16 值不会转换回“66700”,而是得到“3624000652” .
转换实际上是如何发生的??
对于 UTF-8,4 字节编码 类似于 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
但这在 UTF-16 中是如何发生的?如果有人能以最简单的方式向我解释,那将是一个巨大的帮助,因为过去几天我一直在寻找它,但一直找不到对我有意义的好答案。
我用于转换的网站是Branah.com 和rapidtables.com
【问题讨论】:
-
UTF-16 使用 surrogate pairs 表示平面 0 以外的字符。
-
????(U+1048C) 在 UTF-8 中是十六进制0xF0 0x90 0x92 0x8C,在 UTF-16 中是十六进制0xDB01 0xDC8C,在 UTF-32 中是十六进制0x0001048C。如果你用 codeunits 而不是 raw bytes 来表达它们会更容易阅读。 UTF-8 以 1-4 个 8 位代码单元对代码点进行编码。 UTF-16 以 1-2 个 16 位代码单元对代码点进行编码。 UTF-32 以 1 个 32 位代码单元对代码点进行编码。另请记住,UTF-16 和 UTF-32 代码单元受 endian 的约束,而 UTF-8 代码单元则不受。 -
@georg 我想了解更多关于代理对的信息,它们是如何工作的??
-
考虑在http://unicode.org/faq 进行研究。我可以说,作为一个说英语的人,“代理人”似乎很奇怪。我会使用不同的行话:“alibi”。我的意思是保留某些代码点,因此它们不会与需要代码单元对的具有相同数值的 UTF-16 代码单元混淆。从 UTF-16 的角度来看,没有理由将这些值称为“代理”(或“不在场证明”)。从 Unicode 代码点的角度来看,这些值是“不在场证明”,因为它们引用了别处的东西。
标签: unicode encoding utf-8 utf-16