gpt4 book ai didi

c# - 如何阻止 git 在 checkout 时破坏编码

转载 作者:太空狗 更新时间:2023-10-29 13:41:29 26 4
gpt4 key购买 nike

我最近使用以下设置将 .gitattributes 文件添加到 C# 存储库:

*            text=auto
*.cs text diff=csharp

我重新规范了存储库 following these instructions from github它似乎工作正常。

我遇到的问题是,当我检查一些文件(不是全部)时,我看到许多奇怪的字符与实际代码混合在一起。当 git 通过上面的 .gitattributes 文件指定的 lf->crlf 转换运行文件时,似乎会发生这种情况。

根据 Notepad++,弄乱的文件使用 UCS-2 Little EndianUCS-2 Big Endian 编码。似乎工作正常的文件是 ANSIUTF-8 编码的。

作为引用,我的 git 版本是 1.8.0.msysgit.0,我的操作系统是 Windows 8。

有什么办法可以解决这个问题吗?更改文件的编码就足够了吗?

最佳答案

如果您使用每个字符都是两个字节的编码,就会发生这种情况。
然后 CRLF 将被编码为 \0\r\0\n

Git 认为它是单字节编码,所以它把它变成\0\r\0\r\n
这使得下一行偏移了一个字节,导致每隔一行都充满了中文。 (因为\0变成了低位字节而不是高位字节)

您可以使用此 LINQPad 脚本将文件转换为 UTF8:

const string path = @"C:\...";
foreach (var file in Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories))
{
if (!new [] { ".html", ".js"}.Contains(Path.GetExtension(file)))
continue;
File.WriteAllText(file, String.Join("\r\n", File.ReadAllLines(file)), new UTF8Encoding(encoderShouldEmitUTF8Identifier: true));
file.Dump();
}

这不会修复损坏的文件;您可以通过在十六进制编辑器中将 \r\n 替换为 \n 来修复这些文件。我没有相应的 LINQPad 脚本。 (因为 byte[] 没有简单的 Replace() 方法)

关于c# - 如何阻止 git 在 checkout 时破坏编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13704936/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com