cygwin“Bash Prompt Here”无法与变音符号一起使用

cygwin“Bash Prompt Here”无法与变音符号一起使用

当路径中任何位置包含德语变音符号时,使用随 cygwin 包一起安装的 Windows 资源管理器上下文菜单项“此处为 Bash 提示符”chere不起作用。例如:使用它会c:/temp/ö导致在 中打开 Bash 提示符c:/temp,而打开cmd提示符时路径中的变音符号也有效。

我该如何解决这个问题?

供参考:

  1. 创建的注册表项是c:\opt\cygwin\bin\mintty.exe -e /bin/xhere /bin/bash.exe "%L"(在扩展上下文菜单中,“%L”被“%V”替换;但这也不起作用)
  2. cygwin 中的区域设置:LANG=de_DE.UTF-8
  3. 文件系统为 NTFS。因此,文件名据称以“Unicode”存储,无论其在相应文档中的含义如何(Windows 开发人员中心对文件名编码的描述
  4. CMD窗口中的代码页:850(根据powershell命令[System.Text.Encoding]::Default
  5. Windows 代码页:1252
  6. 尽管编码不同,这三个程序(windows explorer、cmd.exe、mintty 中的 bash)都以一致的方式显示变音符号
  7. 无法重命名文件,因为问题主要出现在网络驱动器上,这些文件夹/文件 a) 由大量链接(符号和 Windows 快捷方式)引用,并且 b) 由多个不同用户拥有/共享

答案1

如果 CMD 窗口中的代码页是 850,则文件名中的字符是单个字节,不是有效的 UTF-8 序列。系统可能会显示未知字形�但它什么都没有显示,这并不奇怪,也不意外,也不奇怪。

简单的解决方法是忽略它。稍微不那么简单的解决方法是将系统升级到所有 Unicode。将所有文件重命名为正确的 Unicode 名称,然后将 CMD 窗口设置为也使用 cp65001(我不是 Windows 用户,所以不要问我怎么做。我不确定您是否还需要更改 Windows 默认代码页)。

答案2

最后我终于得到了 mintty 开发人员的帮助,他好心地向我指出了正确的文档(mintty-wiki:https://github.com/mintty/mintty/wiki/Tips#creating-a-folder-context-menu-entry-for-mintty)。据此,chere 创建的上下文菜单项不适用于目录名中的非 ASCII 字符。

不过,只需向 mintty 命令提供一个附加参数即可缓解此问题,该命令可以自行处理任务,而无需 xhere 脚本。因此,只需通过 即可交换上下文菜单条目C:\cygwin64\bin\mintty.exe --dir "%1" /bin/bash。相应的条目现在工作正常。

答案3

为了避免这个问题以及与之相关的任何问题。

仅使用十六进制代码的字符...

2d、破折号
30-39、数字
41-5a、大写 AZ
5f、下划线字符
61-7a 小写 az

... 来自下表中的文件名。

其他任何事情最终都会成为麻烦的根源,例如如果你有时在不同的操作系统之间移动文件(...在网络共享和便携式磁盘上)。

--- HEX/DEC 编码字符表 ---
ECMA-Latin1 ~ ISO 8859-1

       0 1 2 3 4 5 6 7 8 9 abcdef
       - - - - - - - - - - - - - - - -
 2/2:! “#$%&'()*+,-./
 3/3:0 1 2 3 4 5 6 7 8 9:; ?
 4/4:@ABCDEFGHIJKLMNO
 5/5:PQRSTUVWXYZ [ \ ] ^ _
 6/6:` abcdefghijklmno
 7/7: pqrstuvwxyz { | } ~
 8/8:  
 9/9:  
10/a: ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯
11/b: ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
12/c:你正在祈祷,你正在祈祷
13/d:Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
14/e: à á â ã ä å æ ç è é ê ë ì í î ï
15/f: ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ

相关内容