大家好,我想知道 Unicode 编码方案的名称是什么:
代码点 U+1 到 U+7F 使用一个字节表示:
Byte 1: 0xxxxxxx
代码点 U+80 到 U+3FFF 使用两个字节表示:
Byte 1: 0xxxxxxx
Byte 2: 1xxxxxxx
代码点 U+4000 到 U+10FFFF 使用三个字节表示:
Byte 1: 0xxxxxxx
Byte 2: 1xxxxxxx
Byte 3: 1xxxxxxx
据我所知,这个方案击败了 UTF-8,因为只需要一到三个字节来表示每个 CodePoint(UTF-8 需要 1 到 4 个字节来表示单个 CodePoint),我想知道是否有一个正式名称对于这种编码。
您的实际问题似乎是,此编码的“名称是什么”。虽然很难证明是否定的,但我会大胆地说,没有其他人发布并命名了这种编码。你刚刚发明了它。因此,你的答案是这种编码没有名称。为它发明一个名字,那就是它的名字。
您还添加了“据我所知,该方案胜过 UTF-8...”。评论中对此说法进行了讨论。如果您想将其作为一个单独的问题发布,例如“这种编码方案是否比 UTF-8 更好”,那就是另一回事了。提示:如果您这样做,请考虑使用哪些标准来衡量“更好”。你认为你的新编码方案比UTF-8更好吗根据UTF-8自己的设计标准?
冒着不必要地复活一个非常古老的问题的风险,并且只是为了完整性,我想说这是有时被称为“VarInt”的轻微变化(例如参见来自 ProtoBuf 线格式)。它也类似于 VLQ(它有很多变体和许多其他名称)。
不同之处在于,VarInt 在除最后一个字节之外的所有字节上设置了 msb,但 OP 的编码在除第一个字节之外的所有字节上设置了 msb。
我认为 VarInt 编码更好,因为当解码器遇到编码值的第一个字节时,它更容易解码(并且可能更稳健):它可以知道需要更多字节,而无需等待查看接下来的字节。
我必须指出,虽然 ProtoBuf 的使用可能在 2012 年(这个问题发布时)还没有得到很好的宣传,但其他类似(或相同)的编码已经使用了一段时间(请参阅维基百科文章。)