提问人:elo 提问时间:6/12/2023 更新时间:11/1/2023 访问量:222
Git 无法从 UTF-8 编码到 UTF-16LE-BOM
Git failed to encode from UTF-8 to UTF-16LE-BOM
问:
我的存储库中有很多旧版 Windows 资源文件 (*.rc)。最初,它们具有 UTF-8、ASCII、UTF-16 或其他编码。此外,我的存储库中没有 .git属性,因此 git 无法为 UTF-16 文件生成差异并将它们视为二进制文件。
在我的分支中,我已将所有 *.rc 文件转换为带有 CRLF 行尾的 UTF-16LE-BOM,并添加了带有 .(我已将所有文件转换为 UTF-16,以仅使用 *.rc 掩码,而不是显式列出所有文件。dev
**/*.rc text working-tree-encoding=UTF-16LE-BOM eol=CRLF
但是当我克隆我的存储库并尝试分支时,我看到了很多错误,所以看起来 git 将它们视为 UTF-8,而不管 .gitattributes 内容如何。此外,在签出后,所有 *.rc 文件都会损坏。git checkout
dev
failed to encode '...' from UTF-8 to UTF-16LE-BOM
以前:
#include <winver.h>
// Version Information
#ifndef _DEBUG
后:
#include <winver.h>
ഀഀ
// Version Information
⌀椀昀渀搀攀昀 开䐀䔀䈀唀䜀ഀഀ
另外,如果我在结帐后输入,git 会显示 .git status
failed to encode '...' from UTF-16LE-BOM to UTF-8
有什么办法可以解决这个问题吗?
答:
.gitattributes 文件的文档包含用于配置 UTF-16 文件的工作树编码的示例,这些文件(1) 具有字节顺序标记 (BOM),或 (2) 缺少字节顺序标记。解释一下:
如果 UTF-16 文件具有 BOM,请设置 .Git 显然会检查 BOM 以区分小端序和大端序。working-tree-encoding=UTF-16
如果 UTF-16 文件缺少 BOM,请根据正在使用的文本编码设置 或。working-tree-encoding=UTF-16LE
working-tree-encoding=UTF-16BE
文档中从未提及编码类型;但是,Git 支持从终端(或从 Windows 上的 Git Bash)运行时可用的编码。 在 Ubuntu 18.04 或 Windows 10 上均未显示为受支持的编码。UTF-16LE-BOM
iconv --list
UTF-16LE-BOM
评论
'⌀椀昀渀搀攀昀 开䐀䔀䈀唀䜀ഀഀ'.encode('utf-16-le').decode('utf-16-be')
'#ifndef _DEBUG\r\r'
'⌀椀昀渀搀攀昀 开䐀䔀䈀唀䜀ഀഀ'.encode('utf-16-be').decode('utf-16-le')
'#ifndef _DEBUG\r\r'