2010-07-19 9 views
12

En mi cuadro de Windows, traté de crear un parche de Subversion usando el comando svn diff > my_patch.diff. El archivo resultante estaba codificado con UTF-16, en lugar de UTF-8 o ASCII, así que cuando traté de usar patch (desde GnuWin32) para aplicar el parche, no funcionó.Cómo evitar que "svn diff" genere salida Unicode en Windows

Pude convertir el archivo de parche a UTF8 abriéndolo en el Bloc de notas y guardándolo como el formato deseado, y patch lo manejó bien después de eso. Pero, ¿hay alguna manera de obtener svn diff para generar UTF8 en Windows?


Actualización: Como mi respuesta indica, resulta que el problema es realmente no relacionado con la subversión, diff, o patch. Fue PowerShell el que tan útilmente convirtió la salida a Unicode. Dejaré la pregunta tal como está para que alguien con un problema similar se tropiece con ella.

+0

En los sabores de Linux, se puede dar un '--diff-cmd', ¿ese es también el caso de la variante de línea de comandos de Windows? – Wrikken

+0

'--diff-cmd' es compatible. ¿Qué debería usar como argumento? –

+2

Nota al margen: a Subversion no le gusta UTF-16 o UTF-32. Siempre los tratará como archivos binarios y, por lo tanto, 'svn diff' ni siquiera funciona en ellos (braindead pero aún no hay solución). Por lo tanto, allí (actualmente) no puede haber una manera de 'svn di' Unicode en algo más que UTF-8. – Joey

Respuesta

14

Después de mucho rascarse la cabeza y experimentar con diferentes utilidades diff, me di cuenta de esto:

estaba corriendo mi svn diff en una ventana de comandos de PowerShell. Los operadores de redirección de salida de PowerShell convierten la salida a Unicode.

Si ejecuto svn diff > my_patch.diff en un shell cmd.exe, todo funciona bien.

para hacer este trabajo en PowerShell, uno debe utilizar un comando como este:

svn diff | out-file -encoding ascii my_patch.diff 

Estoy seguro de que hay alguien en Microsoft cree que este comportamiento es realmente impresionante.

Cuestiones relacionadas