Git 无法从 UTF-8 编码为 UTF-16LE-BOM

问题描述 投票:0回答:1

我的存储库中有很多旧版 Windows 资源文件 (*.rc)。最初他们有 UTF-8、ASCII、UTF-16 或其他编码。另外,我的存储库中没有 .gitattributes,因此 git 无法为 UTF-16 文件生成 diff 并将它们视为二进制文件。

在我的

dev
分支中,我已将所有 *.rc 文件转换为带有 CRLF 行结尾的 UTF-16LE-BOM,并添加了带有
**/*.rc text working-tree-encoding=UTF-16LE-BOM eol=CRLF
的 .gitattributes。 (我已将所有文件转换为 UTF-16,以便仅使用 *.rc 掩码,而不是显式列出所有文件。)

但是当我克隆我的存储库并尝试

git checkout
dev
分支时,我看到很多错误
failed to encode '...' from UTF-8 to UTF-16LE-BOM
,所以看起来 git 将它们视为 UTF-8,无论 .gitattributes 内容如何。此外,签出后所有 *.rc 文件都会损坏。

之前:

#include <winver.h>

// Version Information
#ifndef _DEBUG

之后:

#include <winver.h>
਍ഀഀ
// Version Information
਍⌀椀昀渀搀攀昀 开䐀䔀䈀唀䜀ഀഀ

另外,如果我在结账后输入

git status
,git 会显示
failed to encode '...' from UTF-16LE-BOM to UTF-8

有什么办法可以解决这个问题吗?

git utf-8 utf-16
1个回答
0
投票

.gitattributes 文件的文档提供了配置 UTF-16 文件工作树编码的示例,这些文件 (1) 具有字节顺序标记 (BOM),或 (2) 缺少字节顺序标记。解释一下:

如果 UTF-16 文件有 BOM,请设置

working-tree-encoding=UTF-16
。 Git 显然会检查 BOM 以区分小端和大端。

如果 UTF-16 文件缺少 BOM,请根据使用的文本编码设置

working-tree-encoding=UTF-16LE
working-tree-encoding=UTF-16BE

文档中从未提及编码类型

UTF-16LE-BOM
;但是,Git 支持从终端(或 Windows 上的 Git Bash)运行
iconv --list
时可用的编码。
UTF-16LE-BOM
在 Ubuntu 18.04 或 Windows 10 上不显示为受支持的编码。

© www.soinside.com 2019 - 2024. All rights reserved.