cygwin "Bash Prompt Here" не работает с умляутами

cygwin "Bash Prompt Here" не работает с умляутами

Использование пункта контекстного меню проводника Windows "Bash prompt here", установленного с пакетом cygwin, 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, bash в mintty) отображают умлаут одинаково, несмотря на разные кодировки.
  7. Переименование файлов невозможно, поскольку проблема в основном возникает на сетевых дисках с папками/файлами, которые а) ссылаются на множество ссылок (как символических, так и ярлыков Windows) и б) принадлежат/разделяются несколькими разными пользователями.

решение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

... из таблицы ниже в именах файлов.

Все остальное в конечном итоге станет источником проблем, например, если вы в какой-то момент времени перемещаете файлы между разными ОС (... на сетевых ресурсах и переносных дисках).

--- Таблица символов в шестнадцатеричной/десятеричной кодировке ---
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/б: ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿
12/c: А Б В Г Д Е Ж З И И К Л М Н О П
13/д: Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß
14/e: а б в г д е ж з и й к л м н о п
15/ж: р с т у ф х ц ÷ ш щ щ ы щ е щ е щ

Связанный контент