我在其中一个很长的 shell 脚本中使用 GNU 对话框。我遇到的一个问题是当我要求用户输入书名(主要是法语)的输入框时。
在此输入框中,输入重音字符(éàè 在法语中很常见)或特殊的 UTF-8 字符(例如长划线“—”)会将光标向右移动 4 个字符,而不是 1 个字符。输入 3 或 4 个“特殊”字符后,由于此问题,输入框完全无法使用。
同样,当我显示带有对话框的菜单时,重音字符会移动对话框的右边框。这比在 inputBox 中更少出现障碍,但仍会造成视觉不适。
我尝试过各种各样的方法来让它工作,但都无济于事。
为了记录,这是我的 LC_* 环境变量:
LC_PAPER=fr_FR.UTF-8
LC_ADDRESS=fr_FR.UTF-8
LC_MONETARY=fr_FR.UTF-8
LC_NUMERIC=fr_FR.UTF-8
LC_ALL=fr_FR.UTF-8
LC_TELEPHONE=fr_FR.UTF-8
LC_MESSAGES=fr_FR.UTF-8
LC_IDENTIFICATION=fr_FR.UTF-8
LC_COLLATE=fr_FR.UTF-8
LC_MEASUREMENT=fr_FR.UTF-8
LC_CTYPE=fr_FR.UTF-8
LC_TIME=fr_FR.UTF-8
LC_NAME=fr_FR.UTF-8
LANG=fr_FR.UTF-8
我能做什么?
(编辑:如下所示,我在 Mac 上,无论我使用 iTerm2 还是内置终端仿真器,都会出现同样的问题。)
答案1
我知道这是一个老问题,但答案可能很有用......
我通过设置以下环境变量解决了该问题:
export NCURSES_NO_UTF8_ACS=1
我有带 putty-256color 终端字符串的 putty 和一台 RHEL6 机器。使用 tmux 或 screen 时也可以使用。有关此变量的更多信息,只需调用“man 3 ncurses”。
答案2
确保您的终端处于 UTF-8 模式。如果您像某些人一样从 ~/.bashrc 设置区域设置变量,则它们将应用于壳,但不是其父级终端。用于tr \\0 \\n </proc/$PPID/environ
检查终端是否具有相同的区域设置变量。(有些终端(例如 GNOME 终端)有明确的字符编码菜单,您可以使用它来代替。)
另外,请确保列出了语言环境locale -a
– 如果没有,请编辑 /etc/locale.gen 并locale-gen
以 root 身份运行。
请注意,除非必要,否则不建议设置 LC_ALL,因为这会使更具体的变量无法覆盖。只需 LANG 就足够了