2010-07-19 15 views
12

Sur mon boîtier Windows, j'ai essayé de créer un correctif Subversion en utilisant la commande svn diff > my_patch.diff. Le fichier résultant a été encodé avec UTF-16, plutôt que UTF-8 ou ASCII, donc quand j'ai essayé d'utiliser patch (à partir de GnuWin32) pour appliquer le correctif, cela n'a pas fonctionné.Comment empêcher "svn diff" de générer une sortie Unicode sous Windows

J'ai été en mesure de convertir le fichier correctif en UTF8 en l'ouvrant dans le Bloc-notes et en l'enregistrant au format souhaité, et patch l'a traité correctement après cela. Mais, est-il un moyen d'obtenir svn diff pour générer UTF8 sur Windows?


Mise à jour: Comme ma réponse indique, il se trouve que le problème est vraiment sans rapport avec Subversion, diff ou patch. C'était PowerShell qui convertissait si bien la sortie en Unicode. Je laisse la question telle quelle afin que quelqu'un avec un problème similaire puisse trébucher dessus.

+0

Dans les versions linux, un '--diff-cmd' peut être donné, est-ce aussi le cas pour la variante de la ligne de commande de Windows? – Wrikken

+0

'--diff-cmd' est supporté. Que devrais-je utiliser comme argument? –

+2

Note: Subversion n'aime pas UTF-16 ou UTF-32. Il les traite toujours comme des fichiers binaires et donc 'svn diff' ne fonctionne même pas dessus (braindead mais toujours pas de correctif). Donc, là (actuellement) ne peut pas être un moyen que 'svn di' Unicode dans autre chose que UTF-8. – Joey

Répondre

14

Après beaucoup de tête-éraflure et d'expérimenter avec différents services publics diff, je compris cela:

je courais mon svn diff dans une fenêtre de commande PowerShell. Les opérateurs de redirection de sortie de PowerShell convertissent la sortie en Unicode.

Si je cours svn diff > my_patch.diff dans un shell cmd.exe, alors tout fonctionne bien.

Pour faire ce travail dans PowerShell, il faut utiliser une commande comme ceci:

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

Je suis sûr qu'il ya quelqu'un chez Microsoft qui pense que ce comportement est vraiment génial.