Han*_*nes 40 windows unicode bash utf-8 git-bash
我在使用unicode为git-bash工作时遇到了一些麻烦(在Windows 7上).我尝试过许多事情都没有成功.虽然,我不太确定对此有什么责任,所以我可能在错误的方向上工作.
看来这应该是可行的,因为可以使用'chcp 65001'将cmd.exe的编码更改为unicode.
以下是我尝试过的一些事情(除了明显的浏览GUI中的配置选项).
在'.bashrc'中设置环境变量.我想这是行不通的,因为我觉得这是一个linux的事情.'locale'命令不存在.
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)从cmd.exe开始,使用'chcp 65001'将编码更改为unicode,然后启动git-bash.这会导致我在尝试捕获我的unicode测试文件时获得权限被拒绝.但是,在没有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£
Run Code Online (Sandbox Code Playgroud)在启动shell时使用/ U标志(有道理它不起作用,因为它不是正确的,如果我理解正确,但它与unicode有关,所以我尝试了它).
C:\Windows\SysWOW64\cmd.exe /U /C "C:\Program Files (x86)\Git\bin\sh.exe" --login -i
Run Code Online (Sandbox Code Playgroud)由于我更喜欢使用Console2,我尝试将名为CodePage的值为65001(十进制)的双字值添加到[HKEY_CURRENT_USER\Console]下的Windows注册表以及[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的TCC/LE
PowerCMD
堆栈溢出
duckduckgo
ixquick /谷歌
因此,如果可以修复权限问题,方法2似乎是可行的.但是,我对任何解决方案都很开放,但我更喜欢我可以使用Console2(主要是因为它的漂亮标签功能).也许一个解决方案是设置SSH服务器,然后使用Putty/Kitty连接到它,但这是错的!; )
PS.有没有关于git-bash的官方文档?
nka*_*sar 36
我在MSYS Git 2.8.0中遇到了同样的问题,结果发现只需更改配置.
$ git --version
git version 2.8.0.windows.1
Run Code Online (Sandbox Code Playgroud)
我系统中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'@
Run Code Online (Sandbox Code Playgroud)
最后一行应显示"Ταέγγραφάμου",即"我的文档"的希腊语翻译.为了解决这个问题,我按照以下步骤操作:
检查现有的区域设置配置
$locale
LANG=en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
如上所示,在我的情况下,它不是UTF-8
将语言环境更改为UTF-8编码.单击MINGW标题栏左侧的图标,选择"选项",然后在"文本"类别中选择"UTF-8"字符集.您还应该选择unicode字体,例如默认的"Lucida Console".我的配置如下:

更改当前窗口的语言(不需要在将来的窗口中执行此操作,因为它们将使用步骤2的设置创建)
$ LANG='C.UTF-8'
Run Code Online (Sandbox Code Playgroud)现在应该正确显示ls命令
AppData/
'Application Data'@
Contacts/
Cookies@
Desktop/
Documents/
Downloads/
Favorites/
Links/
'Local Settings'@
NTUSER.DAT
.
.
.
'?? ??????? ???'@
Run Code Online (Sandbox Code Playgroud)正如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)
WriteConsoleW似乎是将unicode可靠地打印到控制台的唯一方法(没有奇怪的代码页转换).也重定向
vfprintf到winansi.c版本.
添加Unicode转换函数以将Windows本机UTF-16LE编码转换为UTF-8并返回.
为了支持具有遗留编码文件名的存储库,UTF-8到UTF-16转换函数尝试创建有效的唯一文件名,即使对于无效的UTF-8字节序列也是如此,以便可以无错误地检出这些存储库.
它很可能是已经集成在msysgit中的东西的端口,但至少这意味着Windows版本的Git不必为了包含这些改进而从主要的Git repo源代码中分离/补丁.
我可以看到使用 git bash for windows 进行字符编码存在一些问题。较少使用 git 本身及其附带的工具(curl、cat、grep 等)。多年来,我没有遇到与字符编码相关的问题。
通常每个新版本问题都会得到更好的解决。例如,使用一年前的版本,我无法ä在 shell 中输入诸如“ ”之类的字符,因此无法编写
echo "ä"
Run Code Online (Sandbox Code Playgroud)
快速测试是否支持 UTF-8 以及在哪个级别。一种解决方法是编写字节序列八进制:
$ echo -e "\0303\0244"
ä
Run Code Online (Sandbox Code Playgroud)
当我执行我的 windows php.exe 二进制文件以输出文本时,我仍然有问题:
$ php -r 'echo "\xC3\xA4";'
ä
Run Code Online (Sandbox Code Playgroud)
这不会ä在终端中给出“ ”,而是输出“ ?ñ”。我对此的解决方法是,我将php命令包装在一个 bash 脚本中,该脚本通过cat以下方式处理输出:
#!/bin/bash
{ php.exe "$@" 2>&1 1>&3 | cat 1>&2; } 3>&1 | cat
Run Code Online (Sandbox Code Playgroud)
这神奇地然后php再次工作:
$ php -r 'echo "\xC3\xA4";'
ä
Run Code Online (Sandbox Code Playgroud)
适用于
$ git --version
git version 1.9.4.msysgit.1
Run Code Online (Sandbox Code Playgroud)
我必须承认我错过了更深入的理解为什么会这样。但我终于很高兴我找到了一种在 git bash 中使用 php 并支持 UTF-8 的解决方法。
| 归档时间: |
|
| 查看次数: |
48459 次 |
| 最近记录: |