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

pkln4tw6  于 12个月前  发布在  Git
关注(0)|答案(1)|浏览(140)

我的仓库里有很多旧的Windows资源文件(*.rc)。最初它们是UTF-8、ASCII、UTF-16或其他编码的。而且我的仓库里没有. git属性,所以git无法为UTF-16文件生成diff,并将它们视为二进制文件。
在我的dev分支中,我已经将所有的 *.rc文件转换为带有CRLF行结尾的UTF-16 LE-BOM,并添加了带有**/*.rc text working-tree-encoding=UTF-16LE-BOM eol=CRLF的.gitattributes。(我已经将所有文件转换为UTF-16,以简单地使用 *.rc掩码,而不是显式地列出所有文件。)
但是当我克隆我的repo并尝试将git checkout转移到dev分支时,我看到了很多错误failed to encode '...' from UTF-8 to UTF-16LE-BOM,所以看起来git将它们视为UTF-8,而不管.gitattributes的内容。
之前:

#include <winver.h>

// Version Information
#ifndef _DEBUG

字符串
之后:

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


另外,如果我在 checkout 后输入git status,git会显示failed to encode '...' from UTF-16LE-BOM to UTF-8
有什么办法可以补救吗?

9rbhqvlz

9rbhqvlz1#

documentation for the .gitattributes file提供了配置UTF-16文件的工作树编码的示例,这些文件(1)有字节顺序标记(BOM),或(2)没有。
如果UTF-16文件有BOM,设置working-tree-encoding=UTF-16。Git显然会检查BOM以区分little endian和big endian。
如果UTF-16文件缺少BOM表,请根据使用的文本编码设置working-tree-encoding=UTF-16LEworking-tree-encoding=UTF-16BE
编码类型UTF-16LE-BOM从未在文档中提及;但是,当您从终端(或Windows上的Git Bash)运行iconv --list时,Git支持可用的编码。

相关问题