我有一些麻烦让unicode工作git-bash(在Windows 7上)。 我尝试了很多事情,但都没有成功。 虽然,我不太清楚这是什么责任,所以我可能会在错误的方向工作。
这真的应该是可能的,因为cmd.exe的编码可以通过'chcp 65001'改成unicode。
以下是我尝试过的一些事情(除了通过GUI中的configuration选项来查看)。
在“.bashrc”中设置环境variables。 我想这是有道理的,这是行不通的,因为我认为这是一个Linux的东西。 'locale'命令不存在。
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8
从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£
在启动shell时使用/ U标志(有意义的是,它不起作用,因为它不太适合如果我理解正确,但它必须与unicode,所以我试了一下)。
C:\Windows\SysWOW64\cmd.exe /U /C "C:\Program Files (x86)\Git\bin\sh.exe" --login -i
因为我更喜欢使用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)
JPSoft的TCC / LE
PowerCMD
堆栈溢出
duckduckgo
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'@
最后一行应显示“我的文档”的希腊语翻译“Ταέγγραφάμου”。 为了解决它,我遵循以下步骤:
检查您现有的语言环境配置
$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 . . . 'Τα έγγραφά μου'@
正如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
WriteConsoleW
似乎是可靠地打印unicode到控制台(没有奇怪的代码页转换)的唯一方法。
vfprintf
重定向到winansi.c
版本。
添加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。