Domanda

Ho un piccolo programma per console c # che genera del testo usando Console.WriteLine. Quindi installo questo output in un file di testo come:

c: myprogram > textfile.txt

Tuttavia, il file è sempre un file di testo ANSI, anche quando avvio cmd con l'opzione / u. cmd /? dice sull'opzione / u:

  

/ U Provoca l'output di internal   comandi a una pipe o file per essere Unicode

E fa davvero la differenza, quando faccio un

c: echo " foo " & Gt; text.txt

text.txt è unicode (senza DBA)

Mi chiedo perché il piping dell'output del mio programma della console in un nuovo file non crei allo stesso modo un file unicode e come potrei cambiarlo?

Uso solo Windows Power Shell (che produce un file unicode con la distinta componenti corretta), ma mi piacerebbe comunque sapere come farlo con cmd.

Grazie!

È stato utile?

Soluzione

L'opzione / U, come dice la documentazione, influenza se i comandi interni generano output Unicode. Il tuo programma non è uno dei comandi interni di cmd.exe, quindi l'opzione / U non lo influenza.

Per creare un file di testo Unicode, devi assicurarti che il tuo programma stia generando testo Unicode.

Anche questo potrebbe non essere sufficiente, però. Mi sono imbattuto questo blog di Junfeng Zhang descrivendo come per scrivere testo Unicode in un programma console. Verifica il tipo di file dell'handle di output standard. Per i file di caratteri (una console o una porta LPT), chiama WriteFileW. Per tutti gli altri tipi di handle (inclusi file e pipe del disco), converte la stringa di output nella tabella codici corrente della console. Temo di non sapere come ciò si traduca in termini .Net, tuttavia.

Altri suggerimenti

Ho visto come mscorlib implementa Console.WriteLine e sembra che decida quale codifica di output di testo utilizzare in base a una chiamata a GetConsoleOutPutCP . Quindi sto indovinando (ma non ho ancora confermato) che la tabella codici restituita è diversa per una console PS rispetto a una console cmd in modo che il mio programma generi effettivamente solo ansi quando viene eseguito da cmd.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top