我在一个 c++ 项目的 *.rc 文件中遇到了类似的问题,发现解决这个问题的最佳方法是使用 git 的 smudge 和 clean 过滤器将存储库中的所有内容存储为 utf-8,然后在编写时转换为 utf-16到工作目录。
这样 git 所做的一切,例如差异、合并或任何可以在 utf8 文本上正常工作的东西,但您的工作副本将具有 utf16,这将使 Visual Studio 满意。
要配置它,请确保您使用的是具有可用 iconv 的 git 版本(最新版本的 msysgit 可以)并将以下内容添加到您的 ~/.gitconfig 文件中:
[filter "utf16"]
clean = iconv -f utf-16le -t utf-8
smudge = iconv -f utf-8 -t utf-16le
required
然后在你的 .gitattributes 文件中添加:
*.rc filter=utf16
resource.h filter=utf16
如果您已经将 utf16 中的现有文件存储为二进制文件,那么您需要从存储库中删除它们并重新添加它们。
git rm --cached <names-of-utf16-files>
git commit -am "removed utf16 files"
git add <names-of-utf16-files>
git commit -am "added utf16 files as utf8"
现在一切都应该正常了。