【问题标题】:How do I get accented letters to actually work on bash?如何获得重音字母以实际在 bash 上工作?
【发布时间】:2012-10-17 03:37:53
【问题描述】:

我在 cygwin 上的 bash 安装不能正确处理重音字母。我尝试添加

set input-meta on    # to accept 8-bit characters
set output-meta on   # to show 8-bit characters
set convert-meta on  # to show it as character, not the octal representation

到我的输入 rc,但这还不完全奏效。确实,如果我输入

$ echo ù

然后在我按回车之前它会自动更改为

$ echo \303

虽然输出是对的,但我得到了

$ echo \303
ù

对于任何其他重音字母,我都会得到相同的结果。通常虽然我使用非意大利语键盘,但我使用autohotkey 用带重音字母的撇号替换字母。在这种情况下,重音字母会被\302 替换,并且它们会根据字母打印垃圾:为ù 打印3y,为ò 打印¢,并且什么都没有否则。

如何让这一切变得有意义?

编辑:我的语言环境设置、cygwin 版本和终端如下

$ uname -a
CYGWIN_NT-6.1-WOW64 ferdi-Asus 1.7.17(0.262/5/3) 2012-10-19 14:39 i686 Cygwin
$ locale
LANG=it_IT.UTF-8
LC_CTYPE="it_IT.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="it_IT.UTF-8"
LC_COLLATE="it_IT.UTF-8"
LC_MONETARY="it_IT.UTF-8"
LC_MESSAGES="it_IT.UTF-8"
LC_ALL=
$ tty
/dev/pty1

我只需单击 Cygwin 终端链接即可调用它。它重定向到

C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -

autohotkey 脚本的相关部分如下

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
...
::avra'::avrà
::avro'::avrò
...

【问题讨论】:

  • 您使用的是哪个 Cygwin 版本,使用什么终端?您的语言环境设置是什么,即 LC_ALL、LC_CTYPE 和 LANG 的值是多少?在任何情况下,convert-meta 都需要关闭,非 ASCII 字符才能正常工作。
  • 我编辑了我的帖子以显示您的要求。关闭 convert-meta 实际上似乎并没有改变任何东西。
  • 非 ASCII 字母在没有 convert-meta 的情况下对我来说可以正常工作,如果我打开它,它们就会停止工作,看看它的描述也就不足为奇了:“如果设置为 'on',Readline 将将第八位设置的字符转换为 ASCII 键序列,方法是去除第八位并在 ESC 字符前加前缀,将它们转换为元前缀键序列。默认值为 'on'。"
  • 尝试以下操作之一:(1) 恢复所有输入 rc 更改,重新启动终端,确认 locale 产生 it_IT.UTF-8 并转到 @987654338 @ menu > Options > Text 你的语言环境是it_IT,你的字符集是UTF-8;备份您当前的 autohkey 脚本并使用例如notepad++ 打开autohotkey 脚本并转换为 UTF-8 without BOM 而不是 ANSI。试试看。如果失败,(2) 恢复备份的autohotkey,然后在mintty 菜单中将字符集更改为CP1252 (ANSI codepage) for locale it_IT, export LC_ALL=it_IT.CP1252,然后重试。跨度>

标签: bash cygwin non-ascii-characters


【解决方案1】:

要通过 Cygwin 使用 Mintty 1.1.2 在 bash 上获取重音字母,只需执行以下操作:

  1. 转到菜单(如果没有看到任何菜单,请右键单击终端)。
  2. 点击选项...
  3. 点击文本
  4. 区域设置更改为C
  5. 字符集更改为ISO-8859-1 (Western European)

然后测试一下:

【讨论】:

  • 谢谢!这在我使用常规意大利布局时有效,但在我通过自动热键脚本插入重音字母时无效。这应该没什么大不了的,因为我的主要目的是能够使用重音编写脚本,而不是直接在 shell 中发出带有重音的命令。我会试一试,看看效果如何。
  • 我建议使用 UTF-8,除非您有特定的理由使用 ISO-8859-1。当然,这会影响重音字符的存储方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-21
  • 2011-09-27
  • 2021-12-16
  • 2013-03-14
  • 2021-03-23
  • 2011-02-11
相关资源
最近更新 更多