【问题标题】:How can I convert between hex NCRs and UTF-8 code units?如何在十六进制 NCR 和 UTF-8 代码单元之间进行转换?
【发布时间】:2017-07-14 03:02:16
【问题描述】:

例如:“大红圈”表情符号????可以使用🔴 在 HTML 中显示,但是如果我创建一个包含相同表情符号的文本文件,使用 UTF-8 编码保存文件,然后使用十六进制编辑器检查它,我可以看到表情符号是用这些表示的四个字节:F0 9F 94 B4。这是一个非常不同的数字。

两种表示形式之间的转换公式是什么?如何从 0x1F534 导出 0xF09F94B4,反之亦然?

【问题讨论】:

  • 您基本上是在问“UTF-8 编码是如何工作的?”

标签: utf-8 utf


【解决方案1】:

1f534 指的是 Unicode 代码点。在二进制中是:

00000001 11110101 00110100

如果您查看UTF-8 Bit Distribution,您会看到这些位如何插入到代码点的 UTF-8 编码中。

Scalar Value                First Byte  Second Byte Third Byte  Fourth Byte
00000000 0xxxxxxx           0xxxxxxx            
00000yyy yyxxxxxx           110yyyyy    10xxxxxx        
zzzzyyyy yyxxxxxx           1110zzzz    10yyyyyy    10xxxxxx    
000uuuuu zzzzyyyy yyxxxxxx  11110uuu    10uuzzzz    10yyyyyy    10xxxxxx

所以你有:

000uuuuu zzzzyyyy yyxxxxxx as
00000001 11110101 00110100

插入位:

11110uuu 10uuzzzz 10yyyyyy 10xxxxxx =
11110000 10011111 10010100 10110100

十六进制是F0 9F 94 B4


反之,从 UTF-8 到代码点,你检查第一个字节的最高有效位以查看使用了多少字节(这应该从上表中清楚),然后取出相关的位并将它们放在一起。


奖金线稿:

000uuuuu zzzzyyyy yyxxxxxx as
00000001 11110101 00110100
   │││││ ││││││││ │││││││└────────┐
   │││││ ││││││││ ││││││└────────┐│
   │││││ ││││││││ │││││└────────┐││
   │││││ ││││││││ ││││└────────┐│││
   │││││ ││││││││ │││└────────┐││││
   │││││ ││││││││ ││└────────┐│││││
   │││││ ││││││││ │└─────┐   ││││││
   │││││ ││││││││ └─────┐│   ││││││
   │││││ │││││││└──────┐││   ││││││
   │││││ ││││││└──────┐│││   ││││││
   │││││ │││││└──────┐││││   ││││││
   │││││ ││││└──────┐│││││   ││││││
   │││││ │││└───┐   ││││││   ││││││
   │││││ ││└───┐│   ││││││   ││││││
   │││││ │└───┐││   ││││││   ││││││
   │││││ └───┐│││   ││││││   ││││││
   ││││└────┐││││   ││││││   ││││││
   │││└────┐│││││   ││││││   ││││││
   ││└─┐   ││││││   ││││││   ││││││
   │└─┐│   ││││││   ││││││   ││││││
   └─┐││   ││││││   ││││││   ││││││
11110uuu 10uuzzzz 10yyyyyy 10xxxxxx =
11110000 10011111 10010100 10110100

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-06
    • 2018-01-16
    • 1970-01-01
    • 2015-12-06
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    相关资源
    最近更新 更多