PowerShell predefinito per l'emissione di UTF-8 anziché UTF-16?


31

Per impostazione predefinita, PowerShell in Windows sembra produrre UTF-16 (ad esempio, se faccio un semplice echo hello > hi.txt, quindi hi.txtfinisce in UTF-16). So che posso forzare questo alla mia codifica di testo desiderata invece di fare echo hello | out-file -encoding utf8 hi.txt, ma quello che mi piacerebbe è che sia quello predefinito quando uso l'operatore di reindirizzamento. C'è un modo per raggiungere questo obiettivo?


1
grazie per la punta per un'alternativa, farlo dal terminale può essere più veloce di un editor di testo a volte.
Todd Partridge,

In Powershell 6.0, ciò è stato reso superfluo: Powershell è ora predefinito su UTF-8 senza codifica per il reindirizzamento. Vedi github.com/PowerShell/PowerShell/issues/4878
kumarharsh

Risposte:


21

L'utilizzo di un decompilatore .NET sull'assemblaggio System.Management.Automation (noto anche come "Assemblaggio del motore di Microsoft Windows PowerShell") rivela questo frammento di codice:

// class: System.Management.Automation.RedirectionNode
private PipelineProcessor BuildRedirectionPipeline(string path, ExecutionContext context)
{
    CommandProcessorBase commandProcessorBase = context.CreateCommand("out-file");
    commandProcessorBase.AddParameter("-encoding", "unicode");
    if (this.Appending)
    {
        commandProcessorBase.AddParameter("-append", true);
    }
    commandProcessorBase.AddParameter("-filepath", path);
    ...

Quindi, mi sembra abbastanza codificato.

Cordiali saluti, questo era su Windows 7 Enterprise x64 con installato PowerShell 2.0.


5
Ancora hard-coded in PowerShell 5 su Windows 10, sfortunatamente:CommandParameterInternal.CreateParameterWithArgument(PositionUtilities.EmptyExtent, "Encoding", "-Encoding:", PositionUtilities.EmptyExtent, "Unicode", false, false);
Artfunkel,

3

Non sono sicuro se questo farà esattamente quello che stai cercando, ma puoi provare a impostare la variabile di ambiente come menzionato qui

$OutputEncoding = New-Object -typename System.Text.UTF8Encoding

2
Non credo $OutputEncodingsia proprio quello di cui ho bisogno; impostato su ASCII in PowerShell e influisce sulla modalità di visualizzazione delle cose . Quello che voglio fare è cambiare il formato del testo salvato in un file, che (AFAICT) è diverso da quello che $OutputEncodingcontrolla.
Benjamin Pollack,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.