首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UTF-8对UTF-16和UTF-32转换混淆

UTF-8对UTF-16和UTF-32转换混淆
EN

Stack Overflow用户
提问于 2019-09-27 21:18:24
回答 1查看 498关注 0票数 2

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

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

如果我把"A“写成”A“,我就会得到这样的东西:

代码语言:javascript
复制
0041 --> UTF-16
00000041 --> UTF-32
41 --> UTF-8
00065 --> Decimal Value

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

现在,如果我将"Я“(没有引号)放入并转换它,那么我会得到类似的值。

代码语言:javascript
复制
042f --> UTF-16
0000042f --> UTF-32
d0af --> UTF-8
01071 --> Decimal Value

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

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

对于我来说,这是一件令人困惑的事情,我已经在网上搜索了关于这个转换的答案,但是到目前为止我还没有找到任何好的答案。

所以,我想知道这里是否有人能帮忙。(那就意味着) //预先感谢。

您还可以在下面的链接中看到此转换的二进制文件。(在上一个例子中,您能解释utf-8二进制值为何不同吗?)

http://kunststube.net/encoding/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-27 21:31:32

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

在这种情况下:

代码语言:javascript
复制
d0af = 11010000 10101111

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

代码语言:javascript
复制
110[10000] 10[101111] = 
      V        V
     10000 101111 = 42f = 1071

之所以这样做,是因为对于普通字符,传输和存储所需的字节较少。但在特殊的情况下,一个不寻常的字符是需要的,它仍然可以用于部分的UTF-8。

如果您有任何问题,请评论。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58141438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档