Varsayılan PowerShell, UTF-16 yerine UTF-8 yayınıyor mu?


31

Varsayılan olarak, Windows PowerShell UTF-16 (Ben basit yaparsanız örneğin çıkışı gibi görünüyor echo hello > hi.txt, o zaman hi.txtUTF-16'da biter). Bunun yerine, bunu yapmak istediğim metni kodlamaya zorlayabileceğimi biliyorum echo hello | out-file -encoding utf8 hi.txt, ancak istediğim şey, yeniden yönlendirme işlecini kullandığımda bunun varsayılan olması. Bunu başarabilmenin bir yolu var mı?


1
alternatif için ipucu için teşekkürler, bunu terminalden yapmak bazen bir metin editöründen daha hızlı olabilir.
Todd Partridge,

Powershell 6.0'da bu gereksiz hale getirildi - Powershell şimdi yeniden yönlendirme kodlaması olmadan varsayılan olarak UTF-8 olarak ayarlandı. Bakınız github.com/PowerShell/PowerShell/issues/4878
kumarharsh

Yanıtlar:


21

System.Management.Automation assembly üzerinde bir .NET decompiler kullanmak (yani, "Microsoft Windows PowerShell Altyapısı Çekirdeği Düzeneği") bu kod parçasını ortaya çıkarır:

// 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);
    ...

Bu yüzden, bana oldukça kodlanmış görünüyor.

Bilginize, bu PowerShell 2.0 yüklü olan Windows 7 Enterprise x64 sistemindeydi.


5
Hala Windows 10'da PowerShell 5'te zor kodlanmış, ne yazık ki:CommandParameterInternal.CreateParameterWithArgument(PositionUtilities.EmptyExtent, "Encoding", "-Encoding:", PositionUtilities.EmptyExtent, "Unicode", false, false);
Artfunkel

3

Bunun tam olarak aradığınızı yapacağından emin değilim, ancak ortam değişkenini burada belirtildiği gibi ayarlamayı deneyebilirsiniz.

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

2
$OutputEncodingİhtiyacım olan şeyin tam olarak olduğunu sanmıyorum ; PowerShell'de ASCII'ye ayarlanmıştır ve işlerin nasıl yapıldığını etkiler görüntülendiğini . Yapmak istediğim, bir dosyaya kaydedilen metin biçimini değiştirmek, ki bu (AFAICT) $OutputEncodingkontrollerden farklı .
Benjamin Pollack
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.