2011-10-06 17 views
6

Utilizzo di Visual Studio 2010. Ho un file resource.h che TortoiseHg pensa sia binario, quindi non visualizzerà un diff per esso nella finestra di commit. Posso facilmente aprire il file in un editor di testo e vedere che è testo normale.Perché TortoiseHg pensa che Resource.h sia binario?

Ho visto una domanda correlata (Why does Mercurial think my SQL files are binary?) che suggerisce che ha a che fare con la codifica dei file. Infatti, l'apertura del file in Notepad ++ dice che il file è in "UCS-2 Little Endian". Come posso risolvere questo? Io, ovviamente, non voglio rompere alcune aspettative di Visual Studio.

risposta

7

Per scopi di visualizzazione, Mercurial tratta tutti i file contenenti NUL byte come binari a causa della convenzione UNIX di lunga data. Questo è giusto sempre .. eccetto per UTF-16 (precedentemente noto come UCS-2) .. dove metà del tuo file è NUL byte!

Internamente, Mercurial tratta tutti i file come file binari in continuazione, quindi questo problema è rilevante solo per cose come se non proviamo a visualizzare le differenze.

in modo da avere due opzioni:

  • ignorarlo, Mercurial funzionerà bene
  • usare una codifica diversa da UTF-16

Alcuni web cercato "utf resource.h -16 "suggerisce che VS2010 andrà bene se si salva questo file in UTF-8 o ASCII, il che dovrebbe essere una scelta perfetta per il codice sorgente C.

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

+1

Come descritto in quella discussione, da Visual Studio ho aperto il file resource.h e sono andato al menu File-> Opzioni di salvataggio avanzate e ho scelto la codifica "Unicode (UTF-8 con firma) - Codepage 65001". Dopo due commit ora posso vedere un diff corretto. – User

+1

Correzione, dopo aver scelto "Unicode (UTF-8 con firma) - Codepage 65001" dopo la modifica nell'editor delle risorse Visual Studio si lamenta del fatto che il file non sia un file di Visual Studio. Invece ho usato "US-ASCII" (come descritto nella discussione collegata in questa risposta). Forse il problema era la firma UTF-8? C'è un'opzione per nessuna firma, ma per ora sto considerando il problema risolto. – User

+1

Preferisci sempre l'opzione senza firma. Il BOM (la firma in questione) è una fonte comune di problemi in molti programmi. E poiché anche senza BOM è relativamente semplice rilevare automaticamente la differenza tra UTF-8 e ISO-8859-1 una volta che contiene un carattere al di fuori dell'intervallo ASCII, in realtà non aggiunge alcun valore. –

5

Prova esplicitamente la conversione/modifica la codifica UTF-8/ASCII e vedere. Puoi farlo dal menu Encoding di Notepad ++ (scegli Codifica in UTF-8)

Visual Studio funzionerà correttamente con il file UTF-8.

+1

Questo non è vero per il file .rc, testato in Visual Studio 2008 e 2013. Ricevo molti errori come "errore RC2135: file non trovato: 0x07" durante la compilazione. Resource.h può essere UTF-8, comunque. –

Problemi correlati