gpt4 book ai didi

javascript - UTF-8 与 UTF-16 和 UTF-32 转换混淆

转载 作者:搜寻专家 更新时间:2023-11-01 00:47:17 29 4
gpt4 key购买 nike

我对将 unicode 字符转换为十六进制值有点困惑。

我正在使用这个网站获取字符的十六进制值。 ( https://www.branah.com/unicode-converter )

如果我输入“A”并进行转换,那么我会得到如下内容:

0041 --> UTF-16
00000041 --> UTF-32
41 --> UTF-8
00065 --> Decimal Value

上面的输出是有意义的,因为我们可以将所有这些十六进制值转换为 65。

现在,如果我输入“Я”(不带引号)并将其转换,那么我会得到类似的值。

042f --> UTF-16
0000042f --> UTF-32
d0af --> UTF-8
01071 --> Decimal Value

此输出对我来说没有意义,因为并非所有这些十六进制值都转换回 1071。

如果您使用 d0af 并尝试将其转换回十进制值,那么您将得到 53423

这让我很困惑,我一直在网上搜索以找到有关此转换的答案,但到目前为止我还没有找到任何好的答案。

所以,我想知道这里是否有人可以提供帮助。 (这意味着很多)//提前致谢。

您还可以在下面的链接中看到这种二进制转换的示例。(您能解释一下为什么 utf-8 二进制值在上一个示例中不同吗??)

http://kunststube.net/encoding/

最佳答案

UTF-8 使用可变长度编码(可以使用 1、2、3 或 4 个字节来存储单个字符)。

enter image description here

在这种情况下:

d0af = 11010000 10101111
开头的

110 告诉我们解码时需要 2 个字节(查看原理图的字节 1 列)。解码时,我们使用字节中第一个 0 之后的二进制数字。所以,110x xxxx x 是我们实际 unicode 值的第一批值。每个额外的字节都遵循 10xx xxxx 的模式。因此,从字节 1 和 2 中获取值,我们得到:

110[10000] 10[101111] = 
V V
10000 101111 = 42f = 1071

这样做的原因是对于普通字符来说,传输和存储所需的字节更少。但在需要不常见字符的特殊情况下,它仍然可以在 UTF-8 的一部分中使用。

如有任何问题,欢迎评论。

关于javascript - UTF-8 与 UTF-16 和 UTF-32 转换混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58141438/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com