【问题标题】:Why does TortoiseHg think Resource.h is binary?为什么 TortoiseHg 认为 Resource.h 是二进制的?
【发布时间】:2011-10-06 23:24:13
【问题描述】:

使用 Visual Studio 2010。我有一个 resource.h 文件,TortoiseHg 认为它是二进制文件,因此它不会在提交窗口中显示差异。我可以很容易地在文本编辑器中打开该文件,并看到它是纯文本。

我看到了一个相关问题 (Why does Mercurial think my SQL files are binary?),这表明它与文件编码有关。实际上,在 Notepad++ 中打开该文件表示该文件位于“UCS-2 Little Endian”中。我怎样才能解决这个问题?显然,我不想打破 Visual Studio 的一些期望。

【问题讨论】:

    标签: visual-studio visual-c++ mercurial tortoisehg binaryfiles


    【解决方案1】:

    仅出于显示目的,Mercurial 将所有包含 NUL bytes 的文件视为二进制文件,这是由于长期存在的 UNIX 约定。这几乎总是正确的.. 除了 UTF-16(以前称为 UCS-2).. 你的文件的一半是 NUL 字节!

    在内部,Mercurial 始终将 所有 文件视为二进制文件,因此此问题仅与我们是否尝试显示差异有关。

    所以你有两个选择:

    • 忽略它,Mercurial 可以正常工作
    • 使用 UTF-16 以外的编码

    一些网络搜索“resource.h utf-16”表明,如果您将此文件保存为 UTF-8 或 ASCII,VS2010 就可以了,这对于 C 源代码来说应该是非常好的选择。

    http://social.msdn.microsoft.com/Forums/en/vssetup/thread/aff0f96d-16e3-4801-a7a2-5032803c8d83

    【讨论】:

    • 如该线程中所述,我从 Visual Studio 中打开了 resource.h 文件并转到菜单文件->高级保存选项并选择编码“Unicode(带签名的 UTF-8)-代码页 65001"。两次提交后,我现在可以看到正确的差异。
    • 更正,在资源编辑器中编辑后选择“Unicode (UTF-8 with signature) - Codepage 65001”时,Visual Studio 抱怨该文件不是 Visual Studio 文件。相反,我使用了“US-ASCII”(如本答案的链接线程中所述)。也许问题出在 UTF-8 签名上?有一个没有签名的选项,但现在我正在考虑解决这个问题。
    • 总是更喜欢无签名选项。 BOM(有问题的签名)是许多程序中常见的问题来源。即使没有 BOM,一旦 UTF-8 和 ISO-8859-1 包含 ASCII 范围之外的字符,自动检测它之间的差异相对简单,它也不会真正增加价值。
    【解决方案2】:

    尝试将编码显式转换/更改为 UTF-8/ASCII 并查看。您可以从 Notepad++ 的 Encoding 菜单中执行此操作(选择以 UTF-8 编码)

    Visual Studio 可以很好地处理 UTF-8 文件。

    【讨论】:

    • 这不适用于 .rc 文件,在 Visual Studio 2008 和 2013 中进行了测试。编译时出现很多错误,例如“错误 RC2135:找不到文件:0x07”。不过,Resource.h 可以是 UTF-8。
    猜你喜欢
    • 2011-01-22
    • 2015-03-24
    • 1970-01-01
    • 2011-10-14
    • 2011-01-29
    • 1970-01-01
    • 2019-04-30
    • 2020-02-18
    • 2020-09-25
    相关资源
    最近更新 更多