我有一些麻烦的Unicode为混帐bash的工作(在Windows 7)。 我已经尝试了许多事情没有成功。 虽然,我不太知道什么是负责为这个,所以我可能会在错误的方向上努力。
这真的好像这应该是可能为cmd.exe的编码可以改变与“CHCP 65001”为Unicode。
这里有一些事情我已经试过(除了明显的通过图形用户界面的配置选项看)。
在“.bashrc”中设置环境变量。 我想这是有道理的,这并不工作,因为我认为这是一个Linux的事情。 在“区域设置”命令不存在。
export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8
输入cmd.exe出发,改变编码与“CHCP 65001”,然后启动混帐的bash为Unicode。 这使我在尝试猫我的Unicode测试文件时否认了许可。 然而,catting文件而不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标志启动shell时(是有道理的,这是行不通的,因为它并不完全是什么它是如果 - 我理解,正确的,但它必须做Unicode的,所以我尝试了)。
C:\Windows\SysWOW64\cmd.exe /U /C "C:\Program Files (x86)\Git\bin\sh.exe" --login -i
至于我更喜欢使用Console2,我试过在[HKEY_CURRENT_USER \控制台]以及[HKEY_CURRENT_USER \控制台\混帐击]添加到Windows注册表命名代码页与值65001(十进制)的DWORD值。 这似乎也为制定“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似乎可行如果权限问题可以是固定的。 不过,我接受,虽然我喜欢,如果我可以使用Console2(主要原因是它的漂亮的标签功能),几乎所有的解决方案。 也许一个解决办法是建立一个SSH服务器上,然后用腻子/小鹰连接到它,但是这只是错了! ; )
PS。 是否有混帐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字体,如默认的“龙力控制台”。 我的配置看起来如下:
改变当前窗口的语言(没有必要做这个未来的窗口,它们将与第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月)仍然存在。
见提交617ce96或承诺1c950a5由卡斯滕Blees( kblees
)
Win32的:支持Unicode控制台输出
WriteConsoleW
似乎是可靠的unicode打印到控制台(不奇怪的代码页转换)的唯一途径。
此外重定向vfprintf
到winansi.c
版本。
Win32的:添加Unicode转换功能
添加Unicode转换功能,以Windows自带UTF-16LE编码之间转换为UTF-8和背部。
为了支持传统的编码文件名库中,UTF-8 UTF-16转换函数试图创建即使无效UTF-8字节序列有效的,唯一的文件名,使得这些存储库可以在没有错误检出。
这很可能是已经集成在msysgit东西端口,但至少这意味着GIT中的Windows版本将不必为了包括改善从主混帐回购协议的源代码发散/补丁。
我可以看到,有一些问题的字符编码使用Git的bash的窗口。 少使用Git本身和它的工具船舶工作,(卷曲,猫的grep等)。 我没有碰到这些遗留的有关多年字符编码问题。
通常情况下,每个新版本的问题得到更好的解决。 例如,用从一年前的版本,我不能像“输入字符ä
”入壳,所以这是不可能写
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。 标准输出+标准错误猫
这神奇然后让php
再次合作:
$ php -r 'echo "\xC3\xA4";'
ä
适用于
$ git --version
git version 1.9.4.msysgit.1
我必须承认,我错过更深的理解为什么这是所有事情是这样的。 但我终于高兴,我找到了一个解决方法中的git bash中使用PHP使用UTF-8支持。
找到这个答案在别处:
chcp.com 65001
Git的bash的CHCP windows7的编码问题
这就是真正解决了这个问题对我来说。