我正在使用 gnome-terminal 3.36 版本
\nbash
我可以毫无问题地输入
$ \xe0\xa4\x85\xe0\xa4\x96\xe0\xa4\xbf\xe0\xa4\xb2\xe0\xa5\x8d \n
Run Code Online (Sandbox Code Playgroud)\n它zsh
没有正确显示
$ \xe0\xa4\x85\xe0\xa4\x96\xe0\xa4\xbf\xe0\xa4\xb2<094d>\n
Run Code Online (Sandbox Code Playgroud)\n\n这是印度字体的 zsh 行为,在 bash 中工作正常。
\n如果您运行info zsh \'special characters\'
(假设您安装了 info 格式的 zsh 文档),您将看到:
\n\n不可打印的多字节字符
\n此项适用于不在 ASCII 范围内的控制字符,\n以及如下其他字符。如果该
\nMULTIBYTE
选项有效,则当该选项打开时,报告为宽度为零的 ASCII 字符集中不存在的多字节字符将被视为组合字符COMBINING_CHARS
。如果该选项为\n关闭,或者如果某个字符出现在组合字符无效\n的位置,则该字符将被视为不可打印。不可打印的多字节字符显示为尖括号之间的\n十六进制数字。该数字是宽字符集中\n字符的代码点;这可能是也可能不是\nUnicode,具体取决于操作系统。
\n
$ unicode $\'\\u94d\'\nU+094D DEVANAGARI SIGN VIRAMA\nUTF-8: e0 a5 8d UTF-16BE: 094d Decimal: ् Octal: \\04515\n\nCategory: Mn (Mark, Non-Spacing); East Asian width: N (neutral)\nUnicode block: 0900..097F; Devanagari\nBidi: NSM (Non-Spacing Mark)\n\nCombining: 9 (Viramas)\n
Run Code Online (Sandbox Code Playgroud)\n因此 U+094D 角色就属于该类别。
\n跑步
\nset -o combiningchars\n
Run Code Online (Sandbox Code Playgroud)\n如果您希望 zle 处理组合字符。
\n同样适用于 U+0301 组合锐音重音,Ste\xcc\x81phane
例如 zle 在Ste<0301>phane
没有该选项的情况下呈现(我个人的偏好,因为我想知道实际上有两个字符组成它,e\xcc\x81
而不是通常的 U+00E9 前置字符)组成\xc3\xa9
)。