Unicode(utf-8)和git-bash

我有一些麻烦让unicode工作git-bash(在Windows 7上)。 我尝试了很多事情,但都没有成功。 虽然,我不太清楚这是什么责任,所以我可能会在错误的方向工作。

这真的应该是可能的,因为cmd.exe的编码可以通过'chcp 65001'改成unicode。

以下是我尝试过的一些事情(除了通过GUI中的configuration选项来查看)。

  1. 在“.bashrc”中设置环境variables。 我想这是有道理的,这是行不通的,因为我认为这是一个Linux的东西。 'locale'命令不存在。

    export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8 
  2. 从cmd.exe开始,使用“chcp 65001”将编码更改为unicode,然后启动git-bash。 这使我得到一个权限被拒绝时,试图猫我的unicodetesting文件。 但是,捕获一个没有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£ 
  3. 在启动shell时使用/ U标志(有意义的是,它不起作用,因为它不太适合如果我理解正确,但它必须与unicode,所以我试了一下)。

     C:\Windows\SysWOW64\cmd.exe /U /C "C:\Program Files (x86)\Git\bin\sh.exe" --login -i 
  4. 因为我更喜欢使用Console2,所以我尝试在[HKEY_CURRENT_USER \ Console]以及[HKEY_CURRENT_USER \ Console \ Git Bash]下向Windowsregistry中添加一个名为CodePage的dword值,值为65001(十进制)。 这似乎与设置“chcp 65001”具有相同的效果,接受它是“自动的”。 (http://stackoverflow.com/questions/379240/is-there-a-windows-command-shell-that-will-display-unicode-characters)

  5. JPSoft的TCC / LE

  6. PowerCMD

  7. 堆栈溢出

  8. duckduckgo

  9. ixquick /谷歌

所以,方法2似乎是可行的,如果该权限问题可以修复。 不过,我打开几乎任何解决scheme,但我更喜欢如果我可以使用Console2(主要由于它的漂亮的选项卡function)。 也许一个解决scheme是build立一个SSH服务器,然后使用Putty / Kitty连接到它,但这是错误的! ; )

PS。 git-bash有没有官方文档?

我在MSYS Git 2.8.0中遇到了同样的问题,结果只是需要更改配置。

 $ 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 . . . ''$'\316\244\316\261'' '$'\316\255\316\263\316\263\317\201\316\261\317\206\316\254'' '$'\316\274\316\277\317\205'@ 

最后一行应显示“我的文档”的希腊语翻译“Ταέγγραφάμου”。 为了解决它,我遵循以下步骤:

  1. 检查您现有的语言环境配置

     $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

  2. 将区域设置更改为UTF-8编码。 点击MINGW标题栏左侧的图标,选择“选项”,在“文本”类别中选择“UTF-8”字符集。 你也应该选择一个Unicode字体,比如默认的“Lucida Console”。 我的配置如下所示: MinGW语言环境配置

  3. 更改当前窗口的语言(在将来的窗口中不需要这样做,因为它们将使用步骤2的设置创建)

      $ LANG='C.UTF-8' 
  4. ls命令现在应该正确显示

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

正如CharlesB在评论中所说,msysgit 1.7.10正确处理unicode。 还有一些问题,但我可以证实更新确实解决了我遇到的问题。

请参阅: https : //github.com/msysgit/msysgit/wiki/Git-for-Windows-Unicode-Support

检查Git 2.1(2014年8月)是否仍然存在问题。
见Karsten Blees( kblees ) 提交617ce96或提交1c950a5

Win32:支持Unicode控制台输出

WriteConsoleW似乎是可靠地打印unicode到控制台(没有奇怪的代码页转换)的唯一方法。

vfprintf重定向到winansi.c版本。

Win32:添加Unicode转换功能

添加Unicode转换函数,以在Windows原生UTF-16LE编码到UTF-8之间进行转换。

为了支持具有传统编码文件名的存储库,即使对于无效的UTF-8字节序列,UTF-8到UTF-16转换函数也会尝试创建有效的唯一文件名,以便可以检出这些存储库而不会出错。

它可能是已经集成在msysgit中的东西的端口,但至少这意味着Windows版本的Git将不必从主Git回购源代码分歧/修补,以包括这些改进。

我可以看到使用git bash进行字符编码时出现了一些问题。 用git本身以及它附带的工具(卷曲,猫,grep等)的工作较少。 这些年来我没有遇到与这些字符编码有关的问题。

通常每个新版本的问题得到更好的解决。 例如,从一年前的版本开始,我无法在shell中输入“ ä ”这样的字符,因此无法写入

 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。 REG。 stdout + stderr猫

这神奇的然后使php再次工作:

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

适用于

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

我必须承认,我错过了更深刻的理解为什么这是事实。 但我终于高兴,我发现一个解决方法,在UTF-8支持git bash中使用php。