混帐,msysgit,口音,utf-8,明确的答案
我读过一些地方有git(或只是msysgit?)和字符编码的问题 – 我相信这只是文件名中的一个问题。
我想要的是一些关于以下方面的“权威”(或至less是权威的)信息:
- 究竟是什么“问题”? (症状)
- 是什么原因? (简要)
- 在什么情况下这是一个显示塞?
- 有没有解决方法,或者没有任何解决方法?
我希望这个问题不是太模糊,我认为把所有这些信息都集中在一个地方是很好的。
更新2017年2月(Git 2.12):字符宽度表已更新为与Unicode 9.0相匹配。
update_unicode.sh
将其移入contrib/update-unicode
:请参阅其自述文件 。
更新2014年8月(git 2.1): 提交a67c821 (TorstenBögershausen(tboegi) )增加了对Unicode 7.0的支持。
2014年4月更新: 提交d813ab9 ( TorstenBögershausen ( tboegi) )增加了对Unicode 6.3的支持
(git 1.9.2):
Unicode 6.3将更多的代码点定义为组合或者重音 。
例如,字符“ö
”可以表示为“o
”,然后是U+0308 COMBINING DIARESIS
(也称为变音符,双点以上)。
我们应该考虑这样一个两个代码点的序列占用一个显示列以便alignment,为此,git_wcwidth()
应该返回0。受影响的代码点是:
U+0358..U+035C U+0487 U+05A2, U+05BA, U+05C5, U+05C7 U+0604, U+0616..U+061A, U+0659..U+065F
之前的unicode标准已经将这些定义为“保留”。
只有范围
0..U+07FF
已经被检查,看看哪些代码点需要被标记为0宽度,而准备这个提交; 可能需要更多更新。
2012年4月更新:Unicode版本支持在版本1.7.10中发布。 看到这个页面的笔记和设置你应该设置。
即:
git config [--global] core.quotepath off git config [--global] i18n.logoutputencoding utf8 git config [--global] i18n.commitencoding utf8 git config [--global] --unset svn.pathnameencoding
recodetree check
命令扫描一个git仓库的整个历史logging并打印所有非ASCII文件名。 如果输出为空,则不需要迁移。
2012年2月更新:UTF-8支持的补丁正在GitHub上的msysgit repo的分支“devel”中提供 ,包括更新less于UTF-8的设置 。
Git for Windows Google+页面提到:
Karsten Blees的Git for Windows UTF-8补丁现在已经被合并为“
devel
”。
这意味着即将发布的版本将支持Unicode文件名!
2011年5月
我相信msysgit问题80有最新的错误。
也在问题376中描述。
例如:
这是发生了什么事情:
Windows上的git对文件名进行操作,并将它们视为字节stream。 在你的情况下,stream恰好是UTF8编码文本。
在Windows上git要求运行时创build一个文件,并将其传递给字节stream。
由于Windows内部一切都是Unicode,所以运行时使用当前设置的语言环境(又名“codepage”)将字节stream转换为UTF16。
也就是说,它将字节stream有效地解释为CP949(韩文)编码文本。
显然,一些UTF8字节序列是无效的CP949序列,并且转换失败(“无效参数”); 或者如果UTF8序列碰巧是正确的CP949序列,则结果(最有可能)是不同的字符。
真正的修复 应该在MingW上 :
对我来说,一个解决scheme就是:在GCC C运行库级别解决这个问题。
也就是说,对于Windows上的mingw GCC运行时库,通过构build时间选项可以使命令行参数(传递给main()
)和文件I / O函数使用基础Windows Unicode API调用,并在使用字节string的C标准函数API中转换为UTF-8编码。
这对于git来说可能“只是工作”,对于运行Windows环境的其他源于Linux的开源项目也是有用的。
ak2评论说MingW不是这个修复的正确位置:
“MinGW编译器提供对Microsoft C运行时function和一些语言特定运行时的访问。
MinGW是极简主义者,不会尝试为MS-Windows上的POSIX应用程序部署提供POSIX运行时环境。
如果你想在这个平台上部署POSIX应用程序,请考虑使用Cygwin。“
msysgit变体上有一些工作正在进行, 以支持unicode 。