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

477
jf1

Использование пункта контекстного меню проводника Windows «Bash prompt here», который устанавливается вместе с пакетом cygwin chere, не работает, если путь содержит немецкий umlaut в любой позиции. Например: использование его для c:/temp/öрезультатов в приглашении Bash, открытом во c:/tempвремя открытия cmdприглашения, работает также с умлаутами в пути.

Как мне решить эту проблему?

FYI:

  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 in mintty) показывают умлаут последовательно, несмотря на разные кодировки
  7. Переименование файлов невозможно, так как проблема в основном возникает на сетевых дисках с папками / файлами, на которые а) ссылается множество ссылок (символьных, а также ярлыков окон) и б), которые принадлежат / разделяются несколькими разными пользователями
0
Что лежит в основе системы кодирования файловой системы? Каковы ваши региональные настройки? tripleee 6 лет назад 0

3 ответа на вопрос

0
Hannu

Чтобы избежать этой проблемы и всего, что с ней связано.

Используйте только символы с шестнадцатеричными кодами ...

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 / б: ° ± ² ³ ´ µ ¶ · ¸ ¹ º »¼ ½ ¾ ¿ 12 / c: À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï 13 / д: Ð Ñ Ò Ó Ô Ö Ö × Ø Ù Ú Û Ü Ý Þ ß 14 / е: а-а-а-а-а-а-а-а-а-р 15 / ф: ñ î î õ õ ö ø ø ù ú û ü ý þ ÿ 
Downvote; стреляет в курьера, не так ли? ;-) Стань настоящим. Hannu 6 лет назад 0
0
tripleee

Если кодовая страница в окне CMD - 850, то символ в имени файла представляет собой один байт, который не является допустимой последовательностью UTF-8. Система, вероятно, может отображать неизвестный глиф, но это не очень странно, неожиданно или странно, что вместо этого она вообще ничего не отображает.

Простое решение состоит в том, чтобы игнорировать это. Чуть менее простое решение - обновить вашу систему до Unicode везде. Переименуйте все файлы, чтобы они имели правильные имена в Юникоде, а затем настройте в окне CMD также использование cp65001 (не для Windows, так что не спрашивайте меня, как. Я не уверен, что вам также нужно изменить кодовую страницу Windows по умолчанию).

Спасибо за предложение. Я действительно сделал бы это на своих собственных дисках, но такой подход, к сожалению, невозможен на сетевых ресурсах (дополнен вопрос этой информацией) jf1 6 лет назад 0
Некоторые платформы позволяют вам определять сопоставление символов имени файла при монтировании общего ресурса, хотя я понятия не имею, поддерживает ли Windows это в той или иной форме. tripleee 6 лет назад 0
0
jf1

В конце концов я получил помощь от самого разработчика mintty, который любезно указал мне на соответствующую документацию (mintty-wiki: https://github.com/mintty/mintty/wiki/Tips#creating-a-folder-context-menu- вход для мяты ). В соответствии с этим записи контекстного меню, созданные chere, НЕ работают с не-ASCII-символами в именах каталогов.

Однако эту проблему можно решить, просто добавив дополнительный параметр в команду mintty, которая может обрабатывать саму задачу без использования скрипта xhere. Таким образом, пункт контекстного меню можно просто заменить C:\cygwin64\bin\mintty.exe --dir "%1" /bin/bash. Соответствующая запись теперь работает просто отлично.

Похожие вопросы