2011-10-06 62 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。 –

相關問題