的Unicode(UTF-8)与GIT-的bash(Unicode (utf-8) with git

2019-06-24 13:51发布

我有一些麻烦的Unicode为混帐bash的工作(在Windows 7)。 我已经尝试了许多事情没有成功。 虽然,我不太知道什么是负责为这个,所以我可能会在错误的方向上努力。

这真的好像这应该是可能为cmd.exe的编码可以改变与“CHCP 65001”为Unicode。

这里有一些事情我已经试过(除了明显的通过图形用户界面的配置选项看)。

  1. 在“.bashrc”中设置环境变量。 我想这是有道理的,这并不工作,因为我认为这是一个Linux的事情。 在“区域设置”命令不存在。

     export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 export LANGUAGE=en_US.UTF-8 
  2. 输入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£ 
  3. 使用/ U标志启动shell时(是有道理的,这是行不通的,因为它并不完全是什么它是如果 - 我理解,正确的,但它必须做Unicode的,所以我尝试了)。

     C:\Windows\SysWOW64\cmd.exe /U /C "C:\Program Files (x86)\Git\bin\sh.exe" --login -i 
  4. 至于我更喜欢​​使用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)

  5. JPSoft的TCC / LE

  6. PowerCMD

  7. 堆栈溢出

  8. duckduckgo

  9. Ixquick的/谷歌

因此,方法2似乎可行如果权限问题可以是固定的。 不过,我接受,虽然我喜欢,如果我可以使用Console2(主要原因是它的漂亮的标签功能),几乎所有的解决方案。 也许一个解决办法是建立一个SSH服务器上,然后用腻子/小鹰连接到它,但是这只是错了! ; )

PS。 是否有混帐bash的任何官方文件?

Answer 1:

我面临着同样的问题在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字体,如默认的“龙力控制台”。 我的配置看起来如下:

  3. 改变当前窗口的语言(没有必要做这个未来的窗口,它们将与第2步的设置创建)

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

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


Answer 2:

作为CharlesB在评论说,msysgit 1.7.10正确处理Unicode。 还有一些问题,但我可以证实,更新并解决我遇到的问题。

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



Answer 3:

检查问题是否使用Git 2.1(2014年8月)仍然存在。
见提交617ce96或承诺1c950a5由卡斯滕Blees( kblees

Win32的:支持Unicode控制台输出

WriteConsoleW似乎是可靠的unicode打印到控制台(不奇怪的代码页转换)的唯一途径。

此外重定向vfprintfwinansi.c版本。

Win32的:添加Unicode转换功能

添加Unicode转换功能,以Windows自带UTF-16LE编码之间转换为UTF-8和背部。

为了支持传统的编码文件名库中,UTF-8 UTF-16转换函数试图创建即使无效UTF-8字节序列有效的,唯一的文件名,使得这些存储库可以在没有错误检出。

这很可能是已经集成在msysgit东西端口,但至少这意味着GIT中的Windows版本将不必为了包括改善从主混帐回购协议的源代码发散/补丁。



Answer 4:

我可以看到,有一些问题的字符编码使用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支持。



Answer 5:

找到这个答案在别处:

chcp.com 65001

Git的bash的CHCP windows7的编码问题

这就是真正解决了这个问题对我来说。



文章来源: Unicode (utf-8) with git-bash