Юникод (utf-8) с git-bash

У меня возникли проблемы с настройкой юникода на git-bash (в Windows 7). Я перепробовал много вещей без успеха. Хотя, я не совсем уверен, что за это отвечает, поэтому я могу работать не в том направлении.

Это действительно кажется возможным, поскольку кодировку cmd.exe можно изменить на unicode с помощью 'chcp 65001'.

Вот некоторые вещи, которые я пробовал (помимо очевидного просмотра параметров конфигурации в графическом интерфейсе).

Установка переменных окружения в .bashrc. Я думаю, что это имеет смысл, это не работает, так как я думаю, что это вещь Linux. Команда locale не существует.

export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8

Начиная с cmd.exe, изменив кодировку на unicode с помощью 'chcp 65001', а затем запустив git-bash. Это приводит к тому, что я получаю отказано в разрешении при попытке перехватить мой тестовый файл Unicode. Тем не менее, загрузка файла без юникода работает просто отлично. Как продемонстрировано, возвращаясь к cmd.exe, я все еще могу «перебить» файл. Используя кодировку по умолчанию (437), я могу отследить файл в bash (разрешение не отклонено, но вывод вымышлен).

S:\>chcp 65001
Active code page: 65001
S:\>"C:\Program Files (x86)\Git\bin\sh.exe" --login -i
zarac@TOWELIE /z
cat /s/unicode.txt
cat: write error: Permission denied
zarac@TOWELIE /z
cat /s/nounicode.txt
abc
zarac@TOWELIE /z
L /s/unicode.txt
-rw-r--r--    1 zarac    Administ        7 May 18 10:30 /s/unicode.txt
zarac@TOWELIE /z
whoami
towelie\zarac
zarac@TOWELIE /z
exit
Z:\>type S:\unicode.txt
abc£

Использование флага / U при запуске оболочки (имеет смысл, что он не работает, потому что это не совсем то, что нужно для if-i-понимаю-правильно, но это связано с юникодом, поэтому я попробовал).

C:\Windows\SysWOW64\cmd.exe /U /C "C:\Program Files (x86)\Git\bin\sh.exe" --login -i

Поскольку я предпочитаю использовать Console2, я попытался добавить значение dword с именем CodePage со значением 65001 (десятичное число) в реестр Windows в [HKEY_CURRENT_USER \ Console], а также в [HKEY_CURRENT_USER \ Console \ Git Bash]. Похоже, что это имеет тот же эффект, что и установка 'chcp 65001', что он «автоматический». (http://stackoverflow.com/questions/379240/is-there-a-windows-command-shell-that-will-display-unicode-characters

JPSoft's TCC / LE

PowerCmd

переполнение стек

DuckDuckGo

ixquick / google

Так что, способ 2 кажется жизнеспособным, если эту проблему с разрешением можно исправить. Тем не менее, я открыт практически для любого решения, хотя предпочитаю использовать Console2 (в основном из-за его изящной вкладки). Возможно, одним из решений было бы настроить SSH-сервер, а затем использовать Putty / Kitty для подключения к нему, но это просто неправильно! ; )

PS. Есть ли официальная документация для git-bash?

Ответы на вопрос(5)


Видетьcommit 617ce96 илиcommit 1c950a5 по Карстен Блис kblees)

Win32: поддержка вывода консоли Unicode

WriteConsoleW кажется единственным способом надежной печати юникода на консоль (без странных преобразований кодовых страниц).

Также перенаправляетvfprintf наwinansi.c версия.

Win32: добавить функции преобразования Unicode

Добавьте функции преобразования Unicode для преобразования между собственной кодировкой UTF-16LE в Windows и UTF-8 и обратно.

Для поддержки репозиториев с устаревшими именами файлов в кодировке функция преобразования UTF-8 в UTF-16 пытается создать действительные уникальные имена файлов даже для недопустимых байтовых последовательностей UTF-8, чтобы эти хранилища могли быть извлечены без ошибок.

Скорее всего, это будет порт чего-то уже интегрированного в msysgit, но по крайней мере это означает, что версия Git для Windows не должна расходиться / исправляться из основного исходного кода репозитория Git для включения этих улучшений.

msysgit 1.7.10 правильно обрабатывает юникод. Есть еще несколько проблем, но я могу подтвердить, что обновление решило проблему, с которой я столкнулся.

Видеть:https: //github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Suppor

что есть некоторые проблемы с кодировкой символов с помощью git bash для Windows. Меньше для работы с самим git и инструментами, с которыми он поставляется (curl, cat, grep и т. Д.). С этими годами у меня не возникало проблем с кодировкой символов.

Обычно с каждой новой версией проблемы решаются лучше. Например. с версией год назад я не мог вводить символы типа "@&quoä "в оболочку, поэтому было невозможно написать

echo "ä"

Быстро проверить, поддерживается ли UTF-8 и на каком уровне. Обходной путь должен написать восьмеричные байтовые последовательности:

$ echo -e "\0303\0244"
ä

По-прежнему возникают проблемы при запуске двоичного файла Windows php.exe для вывода текста:

$ php -r 'echo "\xC3\xA4";'
ä

Это не дает "ä "в терминале, но выводит"├ñ "вместо этого. Обходной путь, который я имею для этого, состоит в том, что я обертываюphpоманда @ в bash-скрипте, который обрабатывает вывод черезcat:

#!/bin/bash

{ php.exe "$@" 2>&1 1>&3 | cat 1>&2; } 3>&1 | cat

ref. рег. stdout + stderr cat

Это волшебно делаетphp снова работает:

$ php -r 'echo "\xC3\xA4";'
ä

Относится

$ git --version
git version 1.9.4.msysgit.1

Должен признаться, мне не хватает более глубокого понимания, почему это так. Но я, наконец, рад, что нашел обходной путь для использования php в git bash с поддержкой UTF-8.

chcp.com 65001

Git bash chcp проблема кодирования windows7

Вот что на самом деле решило для меня.

как оказалось, просто нужно изменить конфигурацию.

$ git --version

git version 2.8.0.windows.1

Конфигурация консоли Git Bash в моей системе по умолчанию не отображала греческие имена файлов.

$cd ~

$ls

AppData/
'Application Data'@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
'Local Settings'@
NTUSER.DAT
.
.
.
''

В последней строке должен отображаться «Τα έγγραφά μου», греческий перевод «Мои документы». Чтобы исправить это, я следовал за следующими шагами:

Проверьте вашу существующую конфигурацию локали

$locale

LANG=en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

Как показано выше, в моем случае это был не UTF-8

Измените локаль в кодировке UTF-8. Щелкните значок в левой части строки заголовка MINGW, выберите «Параметры» и в категории «Текст» выберите набор символов «UTF-8». Вы также должны выбрать шрифт Unicode, например, «Lucida Console» по умолчанию. Моя конфигурация выглядит следующим образом:

Измените язык для текущего окна (нет необходимости делать это в будущих окнах, так как они будут созданы с настройками шага 2)

 $ LANG='C.UTF-8'

Команда ls теперь должна отображаться правильно

AppData/
'Application Data'@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
'Local Settings'@
NTUSER.DAT
.
.
.
'Τα έγγραφά μου'@
\316\244\316\261'' '

В последней строке должен отображаться «Τα έγγραφά μου», греческий перевод «Мои документы». Чтобы исправить это, я следовал за следующими шагами:

Проверьте вашу существующую конфигурацию локали

$locale

LANG=en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

Как показано выше, в моем случае это был не UTF-8

Измените локаль в кодировке UTF-8. Щелкните значок в левой части строки заголовка MINGW, выберите «Параметры» и в категории «Текст» выберите набор символов «UTF-8». Вы также должны выбрать шрифт Unicode, например, «Lucida Console» по умолчанию. Моя конфигурация выглядит следующим образом:

Измените язык для текущего окна (нет необходимости делать это в будущих окнах, так как они будут созданы с настройками шага 2)

 $ LANG='C.UTF-8'

Команда ls теперь должна отображаться правильно

AppData/
'Application Data'@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
'Local Settings'@
NTUSER.DAT
.
.
.
'Τα έγγραφά μου'@
\316\255\316\263\316\263\317\201\316\261\317\206\316\254'' '

В последней строке должен отображаться «Τα έγγραφά μου», греческий перевод «Мои документы». Чтобы исправить это, я следовал за следующими шагами:

Проверьте вашу существующую конфигурацию локали

$locale

LANG=en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

Как показано выше, в моем случае это был не UTF-8

Измените локаль в кодировке UTF-8. Щелкните значок в левой части строки заголовка MINGW, выберите «Параметры» и в категории «Текст» выберите набор символов «UTF-8». Вы также должны выбрать шрифт Unicode, например, «Lucida Console» по умолчанию. Моя конфигурация выглядит следующим образом:

Измените язык для текущего окна (нет необходимости делать это в будущих окнах, так как они будут созданы с настройками шага 2)

 $ LANG='C.UTF-8'

Команда ls теперь должна отображаться правильно

AppData/
'Application Data'@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
'Local Settings'@
NTUSER.DAT
.
.
.
'Τα έγγραφά μου'@
\316\274\316\277\317\205'@

В последней строке должен отображаться «Τα έγγραφά μου», греческий перевод «Мои документы». Чтобы исправить это, я следовал за следующими шагами:

Проверьте вашу существующую конфигурацию локали

$locale

LANG=en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=

Как показано выше, в моем случае это был не UTF-8

Измените локаль в кодировке UTF-8. Щелкните значок в левой части строки заголовка MINGW, выберите «Параметры» и в категории «Текст» выберите набор символов «UTF-8». Вы также должны выбрать шрифт Unicode, например, «Lucida Console» по умолчанию. Моя конфигурация выглядит следующим образом:

Измените язык для текущего окна (нет необходимости делать это в будущих окнах, так как они будут созданы с настройками шага 2)

 $ LANG='C.UTF-8'

Команда ls теперь должна отображаться правильно

AppData/
'Application Data'@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
'Local Settings'@
NTUSER.DAT
.
.
.
'Τα έγγραφά μου'@

ВАШ ОТВЕТ НА ВОПРОС