2011-10-06 59 views
6

使用Visual Studio 2010.我有一个resource.h文件,TortoiseHg认为它是二进制的,所以它不会在提交窗口中显示它的差异。我可以在文本编辑器中轻松打开该文件,并查看它是纯文本文件。为什么TortoiseHg认为Resource.h是二进制的?

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

回答

7

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

在内部,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

+1

正如该线程中所述,从Visual Studio中打开resource.h文件并进入菜单File-> Advanced Save Options并选择编码“Unicode(带签名的UTF-8) - Codepage 65001”。在两次提交后,我现在可以看到一个适当的差异。 – User

+1

在资源编辑器中编辑之后,选择“Unicode(带签名的UTF-8) - Codepage 65001”后,Visual Studio抱怨文件不是Visual Studio文件。相反,我使用“US-ASCII”(如本答案中的链接线程中所述)。也许问题是UTF-8签名?有没有签名的选项,但现在我正在考虑解决问题。 – User

+1

总是喜欢没有签名的选项。 BOM(有问题的签名)是许多程序中常见的问题来源。而且即使没有BOM,一旦它包含ASCII范围之外的字符,自动检测UTF-8和ISO-8859-1之间的区别也相对简单,但它也不会真正增加值。 –

5

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

Visual Studio将使用UTF-8文件工作得很好。

+1

对于.rc文件,这在Visual Studio 2008和2013中进行了测试。在编译时,出现诸如“错误RC2135:文件未找到:0x07”等许多错误。尽管Resource.h可以是UTF-8。 –