6

mediante Visual Studio 2010. Tengo un archivo resource.h cuales TortoiseHg piensa que es binario por lo que no se mostrará un diff para ello en la ventana de confirmación. Puedo abrir fácilmente el archivo en un editor de texto y ver que es texto plano.¿Por qué TortoiseHg piensa que Resource.h es binario?

vi una pregunta relacionada (Why does Mercurial think my SQL files are binary?), que sugiere que tiene que ver con la codificación de archivos. De hecho, al abrir el archivo en Notepad ++ dice que el archivo está en "UCS-2 Little Endian". ¿Cómo puedo arreglar esto? Yo, obviamente, no quiero romper algunas expectativas de Visual Studio.

Respuesta

7

Para fines de visualización solamente, Mercurial trata todos los archivos que contienen NUL bytes como binarios debido a la antigua convención UNIX. Esto es casi siempre correcto ... excepto para UTF-16 (anteriormente conocido como UCS-2) ... ¡donde la mitad de su archivo es NUL bytes!

Internamente, Mercurial trata todos los archivos como binarios todo el tiempo, por lo que este problema solo es relevante para cosas como si intentamos mostrar diffs o no.

lo que tiene dos opciones:

  • ignorarlo, Mercurial funcionará bien
  • utiliza una codificación distinta de UTF-16

Algunos Web buscó "UTF resource.h -16 "sugieren que VS2010 estará bien si guarda este archivo en UTF-8 o ASCII, lo cual debería ser una elección perfecta para el código fuente C.

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

+1

Como se describe en ese hilo, desde dentro de Visual Studio que abrió el archivo resource.h y se fue al menú Archivo-> Opciones avanzadas para guardar y eligió la codificación "Unicode (UTF-8 con firma) - Página de códigos 65001". Después de dos commits ahora puedo ver un diff apropiado. – User

+1

corrección, al elegir "Unicode (UTF-8 con firma) - Página de códigos 65001" después de editar en el editor de recursos de Visual Studio se queja de que el archivo no es un archivo de Visual Studio. En cambio, utilicé "US-ASCII" (como se describe en el hilo enlazado en esta respuesta). Tal vez el problema fue la firma UTF-8? Hay una opción para no firmar, pero por ahora estoy considerando resolver el problema. – User

+1

Siempre prefiera la opción sin firma. La lista de materiales (la firma en cuestión) es una fuente común de problemas en muchos programas. Y como aún sin lista de materiales es relativamente fácil de detectar automáticamente la diferencia entre UTF-8 y ISO-8859-1, una vez que contiene un carácter fuera del rango ASCII, que no añade valor cualquiera. –

5

pruebas a convertir explícitamente/cambiar la codificación a UTF-8/ASCII y ver. Puede hacerlo desde el menú Encoding de Notepad ++ (elija Codificar en UTF-8)

Visual Studio funcionará correctamente con el archivo UTF-8.

+1

Esto no es cierto para el archivo .rc, probado en Visual Studio 2008 y 2013. recibo muchos errores como "RC2135 error: Archivo no encontrado: 0x07" al compilar. Resource.h puede ser UTF-8, sin embargo. –

Cuestiones relacionadas