如何在windows git-bash中将中文文件名从gbk更改为utf-8?

How to change chinese filename from gbk to utf-8 in windows git-bash?

我发现如果我将一个带有中文字符的文件名提交给一些 git 仓库,我无法再次在 macos 中提取该仓库:

$ git pull

...

error: unable to create file ???: Illegal byte sequence

Google 告诉我应该在 Linux 上将文件名从 gbk 更改为 utf-8。但是我只有windows/macos台机器。

我可以将 git-bash 中 windows 的文件名从 gbk 更改为 utf-8 吗?谢谢!

顺便说一句,这些文件名有特殊含义,我不能简单地将这些名称更改为英文单词。我必须将这些名称保留在另一种编码中。

TL;DR

在 Windows 上的 Git Bash 中,您可以通过语法 $'31' 的八进制字节序列或语法 $'31' 的十六进制字节序列来引用文件名$'\xc3\x83'

详情

我没有可以使用 gbk 的机器设置,但我已经测试过,在 Windows、Git Bash 上,您可以通过他们的文件名来引用文件名字节序列。

部分复制:我有一个名为 é 的文件(八进制的 utf8 字节序列:31),我想将其重命名为 ê(八进制的 utf8 字节序列:32).

要执行重命名操作,这对我在 Git Bash 和 Windows 上有用:

git mv $'31' $'32'

所以... 如果 您能够在 Windows 上成功检出您的 gbk 文件,您应该能够使用该技术重命名它。

为了找出表示已经在Git中的名称的八进制序列,顺便说一下,git log --statgit show <commit>等,为我显示那些八进制转义序列中的文件名。不过,我不知道情况是否总是如此。 ls | od 也可能有帮助。

此外,十六进制语法也适用:$'\xc3\x83'.

注意:这些语法不是由 Git 处理的,而是由 Bash 本身处理的,并且应该在任何 OS 上的 bash 提示符下工作。