代码之家  ›  专栏  ›  技术社区  ›  Mateusz Wojtczak

Vim:Utf-8字符分隔符显示字符串

  •  0
  • Mateusz Wojtczak  · 技术社区  · 4 年前

    我有一个包含十六进制内容的文件:db90 3031 46,它应该在vim中显示为“”,后跟“01F”,但我注意到它从未正确显示。然后我注意到在其他地方也是一样的,比如在终端和浏览器中,我总是得到01F?为什么?只需将其粘贴到谷歌上,然后自己尝试一下,你将永远无法将“”和0作为下一个字符。

    1 回复  |  直到 4 年前
        1
  •  5
  •   paxdiablo    4 年前

    这是一个带有 从右向左 指示器,所以您可能需要切换回从左到右模式,例如 U+200e .

    Unicode双向的东西相当复杂——你看到的行为可能是由拉丁数字被标记的事实造成的 EN = European number (弱类型),而 F 标记 L = left to right (强壮型)。

    在Unicode规范中,弱类型的处理方式有所不同,例如下面这句话涵盖了您的具体情况(我的重点是):

    当从右到左的段落以从左到右的字符开头,或者存在不同方向文本的嵌套段,或者方向边界上存在弱字符时,可能会出现问题。 在这些情况下,可能需要嵌入或方向标记以获得正确的显示。

    所以你的代码点后面跟一个数字会显示为“7”(我输入了这个数字) 7 在里面 之后 阿拉伯文字符,尽管它出现在前面),但在后面加上 给出“X”。

    值得一提的是,文本“7”是通过插入 ‎ 在这两个字符之间,HTML等效于 U+200e Unicode代码点。

    如果你去 this UTF-8 codec site 然后进去 %u06D0%u200e7 进入解码部分,你会看到它以你想要的顺序出现(删除 %200e 按照你在问题中描述的顺序显示)。