【问题标题】:Character encoding with msysgit使用 msysgit 进行字符编码
【发布时间】:2011-09-21 02:00:49
【问题描述】:

在我的 WinXP 机器上创建的提交消息在我的 Win7 机器上阅读时会生成警告。

我的名字包含特殊字符 (ö),我想这是问题的根源,因为我的名字在提交中。 我在尝试存储在 winXP 上创建的提交上的更改时看到了这个问题: Warning: commit message does not conform to UTF-8.

我想检查在 winXP 上使用什么编码来生成提交,但找不到方法。

$ git config --get i18n.commitencoding 在两台机器上都返回空白。

http://www.kernel.org/pub/software/scm/git/docs/git-commit.html 似乎说 git 检查提交对象中的编码。

git log、git show、git blame 和 朋友们看一下encoding header 一个提交对象,并尝试重新编码 将日志消息转换为 UTF-8,除非 另有说明。

那很好,但是为什么 git 抱怨 win7 而不是 winXP?


两台机器上的msysgit版本相同:1.7.4.msysgit.0。

【问题讨论】:

  • 您是通过哪个软件生成带有特殊字符“o:”的文件名?使用 msys 还是使用 navive Windows 应用程序?

标签: git encoding msysgit


【解决方案1】:

现代 Git(2019 年)更好地支持使用 i18n.commitEncoding,但只有 Git 2.25(2020 年第一季度)提供了全面支持:在“rebase -i”期间处理使用非 UTF-8 编码的提交对象已经改进了。

请参阅commit 52f52e5commit 5772b0c(2019 年 11 月 11 日)、commit b375744commit 019a9d8commit 0798d16commit e4b95b3commit 1ba6e7a(2019 年 11 月 8 日)和 commit 99b2ba3(2019 年 11 月 7 日) ) by Doan Tran Cong Danh (congdanhqx-zz)
(由 Junio C Hamano -- gitster -- 合并于 commit 6511cb3,2019 年 12 月 1 日)

sequencer: 重新编码旧的合并提交消息

签字人:Doan Tran Cong Danh

在变基期间,旧合并的消息(以旧编码编码)将用作新合并提交的消息(由变基创建)。

如果i18n.commitencoding 的值在旧合并时间之后已更改。我们将收到关于此新合并的不可用消息。

改正它。


sequencer: 在安排 rebase 的 todo 列表之​​前重新编码为 utf-8

签字人:Doan Tran Cong Danh

musl libc 上,ISO-2022-JP 编码器太急于切换回 1 字节编码,musliconv 总是在每个组合字符后切换回。
比较此命令的glibcmusl 的输出

$ sed q t/t3900/ISO-2022-JP.txt| iconv -f ISO-2022-JP -t utf-8 `|`
        iconv -f utf-8 -t ISO-2022-JP | xxd

glibc: 
00000000: 1b24 4224 4f24 6c24 5224 5b24 551b 2842  .$B$O$l$R$[$U.(B
00000010: 0a                                       .

musl: 
00000000: 1b24 4224 4f1b 2842 1b24 4224 6c1b 2842  .$B$O.(B.$B$l.(B
00000010: 1b24 4224 521b 2842 1b24 4224 5b1b 2842  .$B$R.(B.$B$[.(B
00000020: 1b24 4224 551b 2842 0a                   .$B$U.(B.

虽然musl iconv 的输出不是最优的,但它仍然是正确的。

来自commit 7d509878b8(“pretty.c:格式字符串与截断尊重logOutputEncoding”,2014-05-21,Git v2.1.0-rc0 -- mergebatch #3 中列出),我们首先将消息编码为 utf-8,然后对其进行格式化并将消息转换为git commit --squash 上的实际输出编码。

因此,t3900::test_commit_autosquash_flagsmusl libc 上失败。

在安排 rebase 的待办事项列表之前重新编码为 utf-8。


configure.ac:必要时定义ICONV_OMITS_BOM

签字人:Doan Tran Cong Danh

来自commit 79444c9294(“utf8:处理不为 UTF-16 编写 BOM 的系统”,2019-02-12,Git v2.21.0-rc1 -- mergebatch #0 中列出) ,我们用iconv 支持那些省略了BOM 的系统:

make ICONV_OMITS_BOM=Yes

但是,配置脚本并没有被教导来检测这些系统。

教配置这样做。

【讨论】:

    【解决方案2】:

    只是一个疯狂的猜测,但我最近在 Rakefile 中的某人姓名中遇到了类似的问题,实际上我必须更改我的 CMD 环境的编码才能运行它。

    查看此 wiki 上的第二步:

    https://github.com/NancyFx/Nancy/wiki/Having-trouble-with-rake%3F

    关于 chcp 命令的 Microsoft 文档在这里: http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/chcp.mspx?mfr=true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      相关资源
      最近更新 更多