UTF-16 대신 UTF-8을 방출하는 기본 PowerShell?


31

기본적으로 Windows에서 PowerShell은 UTF-16 (I 간단한을 할 경우 예를 들어, 출력 것 같다 echo hello > hi.txt, 다음 hi.txtUTF-16에서 끝납니다). 대신을 수행하여 원하는 텍스트 인코딩으로 이것을 강제 할 수 있다는 것을 알고 echo hello | out-file -encoding utf8 hi.txt있지만 원하는 것은 리디렉션 연산자를 사용할 때 기본값이되도록하는 것입니다. 이것을 달성 할 수있는 방법이 있습니까?


1
대안에 대한 팁 덕분에 터미널 에서이 작업을 수행하는 것이 때로는 텍스트 편집기보다 빠를 수 있습니다.
Todd Partridge 2016 년

Powershell 6.0에서는 이것이 불필요하게 렌더링되었습니다. 이제 Powershell은 리디렉션 인코딩없이 UTF-8로 기본 설정됩니다. github.com/PowerShell/PowerShell/issues/4878
kumarharsh를

답변:


21

System.Management.Automation 어셈블리 ( "Microsoft Windows PowerShell 엔진 코어 어셈블리")에서 .NET 디 컴파일러를 사용하면이 코드 조각이 나타납니다.

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

그래서 그것은 나에게 꽤 하드 코딩 된 것처럼 보입니다.

참고로, 이것은 PowerShell 2.0이 설치된 Windows 7 Enterprise x64 시스템에있었습니다.


5
불행히도 Windows 10의 PowerShell 5에서는 여전히 하드 코딩되어 있습니다.CommandParameterInternal.CreateParameterWithArgument(PositionUtilities.EmptyExtent, "Encoding", "-Encoding:", PositionUtilities.EmptyExtent, "Unicode", false, false);
Artfunkel

3

이것이 원하는 것을 정확하게 수행하는지 확실하지 않지만 여기에 언급 된대로 환경 변수를 설정할 수 있습니다

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

2
나는 $OutputEncoding내가 필요한 것이 아니라고 생각한다 . 이는 PowerShell에서 ASCII로 설정되며 사물이 표시되는 방식에 영향을줍니다 . 내가하고 싶은 것은 파일에 저장된 텍스트의 형식을 변경하는 것입니다 (AFAICT)는 어떤 $OutputEncoding컨트롤 과 다릅니다 .
Benjamin Pollack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.