当路径中任何位置包含德语变音符号时,使用随 cygwin 包一起安装的 Windows 资源管理器上下文菜单项“此处为 Bash 提示符”chere
不起作用。例如:使用它会c:/temp/ö
导致在 中打开 Bash 提示符c:/temp
,而打开cmd
提示符时路径中的变音符号也有效。
我该如何解决这个问题?
供参考:
- 创建的注册表项是
c:\opt\cygwin\bin\mintty.exe -e /bin/xhere /bin/bash.exe "%L"
(在扩展上下文菜单中,“%L”被“%V”替换;但这也不起作用) - cygwin 中的区域设置:
LANG=de_DE.UTF-8
- 文件系统为 NTFS。因此,文件名据称以“Unicode”存储,无论其在相应文档中的含义如何(Windows 开发人员中心对文件名编码的描述)
- CMD窗口中的代码页:850(根据powershell命令
[System.Text.Encoding]::Default
) - Windows 代码页:1252
- 尽管编码不同,这三个程序(windows explorer、cmd.exe、mintty 中的 bash)都以一致的方式显示变音符号
- 无法重命名文件,因为问题主要出现在网络驱动器上,这些文件夹/文件 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: ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ