GNU Dialog 和 UTF-8 字符

GNU Dialog 和 UTF-8 字符

我在其中一个很长的 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 就足够了

相关内容