Question

J'ai un petit programme de console c # qui génère du texte à l'aide de Console.WriteLine. Je dirige ensuite cette sortie dans un fichier texte tel que:

c: mon programme > textfile.txt

Cependant, le fichier est toujours un fichier texte ansi, même lorsque je lance cmd avec le commutateur / u. cmd /? dit à propos du commutateur / u:

  

/ U Provoque la sortie de interne   commandes à un canal ou un fichier à être Unicode

Et cela fait vraiment une différence, quand je fais un

c: echo " foo " > text.txt

le texte.txt est unicode (sans nomenclature)

Je me demande pourquoi le fait de canaliser la sortie de mon programme console dans un nouveau fichier ne crée pas un fichier unicode de la même manière et comment puis-je changer cela?

Je viens d'utiliser Windows Power Shell (qui produit un fichier unicode avec la nomenclature correcte), mais j'aimerais quand même savoir comment le faire avec cmd.

Merci!

Était-ce utile?

La solution

Le commutateur / U, comme indiqué dans la documentation, détermine si les commandes internes génèrent une sortie Unicode. Votre programme ne fait pas partie des commandes internes de cmd.exe. Par conséquent, l'option / U ne l'affecte pas.

Pour créer un fichier texte Unicode, vous devez vous assurer que votre programme génère du texte Unicode.

Même si cela n’est peut-être pas suffisant. Je suis tombé sur ce blog de Junfeng Zhang décrivant comment écrire du texte Unicode dans un programme de console. Il vérifie le type de fichier du descripteur de sortie standard. Pour les fichiers de caractères (un port console ou LPT), il appelle WriteFileW. Pour tous les autres types de descripteurs (y compris les fichiers de disque et les canaux), il convertit la chaîne de sortie en page de code actuelle de la console. J'ai bien peur de ne pas savoir comment cela se traduit en termes .Net, cependant.

Autres conseils

J'ai vu comment mscorlib implémentait Console.WriteLine et il semble décider quel codage de sortie de texte utiliser en fonction d'un appel à GetConsoleOutPutCP . Donc, je suppose (mais je n’ai pas encore confirmé) que la page de codes renvoyée est différente d’une console PS à une console cmd, de sorte que mon programme ne génère en effet que l’ansi lorsqu’il est exécuté à partir de cmd.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top