Vim:UTF-8 ?字符中断显示的字符串

Mat*_*zak 0 vim utf-8

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

\n

pax*_*blo 6

这是一个带有从右到左指示符的阿拉伯字符,因此您可能需要切换回从左到右模式,例如使用U+200e.

\n\n

EN = European numberUnicode 双向内容相当复杂 - 您所看到的行为可能是由于拉丁数字被标记(弱类型),而诸如 之类的字母F被标记L = left to right(强类型)这一事实引起的。

\n\n

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

\n\n
\n

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

\n
\n\n

因此,您的代码点后跟一个数字呈现为“\xdb\x907”(我在阿拉伯字符之后7输入了该字符,尽管事实上它显示在它之前),而后面跟着一个字母则给出“\xdb\x90X” ”。

\n\n

无论如何,文本“\xdb\x90‎7”是通过在‎两个字符之间插入(相当于U+200eUnicode 代码点的 HTML)生成的。

\n\n

如果您访问此 UTF-8 编解码器站点并进入%u06D0%u200e7解码部分,您将看到它按照您想要的顺序显示(删除%200e按照您在问题中描述的顺序显示它)。

\n