programing

PowerShell의 기본 출력 인코딩을 UTF-8로 변경

codeshow 2023. 4. 17. 22:11
반응형

PowerShell의 기본 출력 인코딩을 UTF-8로 변경

기본적으로 명령 출력을 파일로 리디렉션하거나 PowerShell에서 다른 파일로 파이핑할 때 인코딩은 UTF-16이므로 유용하지 않습니다.UTF-8로 바꾸려고 합니다.

로, 케이스 바이 케이스로 할 수 .>foo.txt합니다.| out-file foo.txt -encoding utf8★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

은 PowerShell에 입니다.\Users\me\Documents\WindowsPowerShell\profile.ps1기동시에 이 파일이 실제로 실행되고 있는 것을 확인했습니다.

에는, 「다보다」를 할 수 알려져 있습니다.$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

https://blogs.msdn.microsoft.com/powershell/2006/12/11/outputencoding-to-the-rescue/ 에 대해 설명합니다.$OutputEncoding언뜻 보면 관련이 있는 것처럼 보이지만, 그 후 출력은 ASCII로 부호화되지만 실제로는 그렇지 않습니다.

UTF-8을 사용하도록 PowerShell을 설정하려면 어떻게 해야 합니까?

주의:

  • 다음 섹션은 주로 윈도우즈 PowerShell에 적용됩니다.

  • 경우 모두 이 정보는 PowerShell이 UTF-8을 사용하여 파일을 읽고 쓰도록 하는적용됩니다.

    • 한편, 외부 프로그램과의 UTF-8 인코딩스트링송수신 방법에 대해서는, 다음의 회답을 참조해 주세요.
  • 현재(Windows 10 의 최신 버전 이후) 시스템 전체에서 UTF-8 로의 전환이 가능합니다. 답변은 참조해 주십시오.다만, 다음의 주의 사항에 주의해 주세요.

    • 및 OEM ANSI로 에 이 .65001(UTF-8 등) 또한 이 문서에서는 이 기능이 베타 기능으로 간주되고 있습니다(Windows 11 22H2).
    • 윈도우즈 PowerShell에서 이 기능은 ANSI 코드 페이지로 기본 이동하는 cmdlet에만 적용됩니다.Set-Content, 그러나 아니다. Out-File>파일 읽기에도 적용됩니다.특히 다음과 같습니다.Get-ContentPowerShell 자체에서 소스 코드를 읽는 방법에 대해 설명합니다.

Windows PowerShell의 관점:

  • PSv5.1 이후로는> ★★★★★★★★★★★★★★★★★」>>는 사실상 입니다.Out-File프리퍼런스 변수를 사용하여 //의 디폴트 부호화를 설정할 수 있습니다.

    • $PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
    • ★★★★
      • Windows PowerShell(최신 및 최종 버전이 v5.1인 레거시 에디션)에서는 반드시 (의사) BOM이 포함된 UTF-8 파일생성됩니다.

        • 많은 Unix 기반 유틸리티는 이 BOM을 인식하지 않습니다(하단 참조). BOM-less UTF-8 파일을 작성하는 회피책은 이 게시물을 참조하십시오.
      • PowerShell(코어) v6+에서는 BOM-less UTF-8기본이지만(다음 항 참조), BOM을 원하는 경우 사용할 수 있습니다.'utf8BOM'

  • PSv5.0 이하에서는 / 의 부호화를 변경할 수 없습니다만, PSv3 이후에서는, 에의 명시적인 콜에 대해서 상기의 기술기능합니다.
    (the)$PSDefaultParameterValuesPSv3.0의 경우).

  • PSv3.0 이상에서는 파라미터를 지원하는 모든
    cmdlet
    대해 기본 인코딩을 설정하는 경우(PSv5.1+에서는 다음과 같습니다).
    > ★★★★★★★★★★★★★★★★★」>>

    • $PSDefaultParameterValues['*:Encoding'] = 'utf8'

이 명령어를 에 배치하면 UTF-8 인코딩과 같은 cmdlets가 기본적으로 사용됩니다.단, UTF-8 인코딩을 명시적으로 지정하지 않는 모든 명령어/스크립트에 영향을 주는 세션글로벌 설정에 주의해 주십시오.-Encoding파라미터를 지정합니다.

마찬가지로 다른 사용자 또는 다른 머신에 의해 실행되는 경우에도 동일한 동작을 할 수 있도록 스크립트 또는 모듈에 이러한 명령어를 반드시 포함시키십시오.단, 세션 글로벌 변경을 방지하려면 다음 형식을 사용하여 로컬복사를 만듭니다.$PSDefaultParameterValues:

  • $PSDefaultParameterValues = @{ '*:Encoding' = 'utf8' }

많은 윈도우즈 PowerShell 표준 cmdlet에서 일치하지 않는 기본 문자 인코딩 동작에 대한 요약은 아래쪽 섹션을 참조하십시오.


자동 변수관련이 없으며 PowerShell이 외부 프로그램과 통신하는 방법(PowerShell이 외부 프로그램에 문자열을 보낼 때 사용하는 인코딩)에만 적용됩니다. 출력 리디렉션 연산자 및 PowerShell cmdlet이 파일에 저장하기 위해 사용하는 인코딩과는 관련이 없습니다.


판독치(옵션):크로스 플랫폼의 관점: PowerShell Core:

PowerShellPowerShell Core 에디션을 통해 크로스 플랫폼이 되었습니다.이 버전의 인코딩은 Unix와 같은 플랫폼에 따라 BOM-less UTF-8로 기본 설정됩니다.

  • , 되며, BOM을 사용하면 UTF-8을 사용할 수 있습니다.>Out-FileSet-Content디폴트로는 BOM-less UTF-8로 설정되어 있습니다.utf8 -Encoding인수도 BOM-less UTF-8을 작성하지만, 이 명령어를 사용하여 의사 BOM을 사용하여 파일을 작성할 수 있습니다.utf8bomdiscloss.discloss 。

  • Unix와 유사한 플랫폼에서 편집기를 사용하여 PowerShell 스크립트를 만들고 Visual Studio Code 및 Sublime Text와 같은 크로스 플랫폼 편집기를 사용하는 Windows에서도 생성하면 결과적으로*.ps1일반적으로 파일에는 UTF-8 의사 B가 없습니다.OM:

    • PowerShell Core에서는 정상적으로 동작합니다.
    • 파일에 ASC가 아닌 경우 Windows PowerShell에서 중단될 수 있습니다.비 ASC를 사용해야 하는 경우 II 문자스크립트에 포함된 II 문자를 BOM과 함께 UTF-8로 저장합니다.
      BOM이 없는 경우 Windows PowerShell(오류)은 기존 "ANSI" 코드 페이지에 스크립트가 인코딩된 것으로 해석합니다(Unicode 이전 애플리케이션의 시스템 로케일(미국 영어 시스템의 Windows-1252 등).
  • 반대로 UTF-8 유사 BOM을 가진 파일은 다음과 같은 Unix 유틸리티의 원인이 되기 때문에 Unix와 같은 플랫폼에서는 문제가 될 수 있습니다.cat,sed , , , , 입니다.awk- 그리고 심지어 다음과 같은 편집자들도gedit- 의사 BOM을 통과시켜 데이터취급합니다.

    • 이것은 항상 문제가 되는 것은 아니지만, 예를 들어 파일을 문자열로 읽으려고 하는 경우 등 분명히 문제가 될 수 있습니다.bash를 들어, '아예'와 함께text=$(cat file) ★★★★★★★★★★★★★★★★★」text=$(<file) 이 경우 3바이트는 BOM입니다.

Windows PowerShell에서 일치하지 않는 기본 인코딩 동작:

유감스럽게도 Windows PowerShell에서 사용되는 기본 문자 인코딩은 매우 일관성이 없습니다. 이전 섹션에서 설명한 바와 같이 크로스 플랫폼 PowerShell Core 에디션에서는 이 기능이 훌륭하게 종료되었습니다.

주의:

  • 다음은 모든 표준 cmdlet을 대상으로 하는 것은 아닙니다.

  • 이제 cmdlet 이름을 검색하여 도움말 항목을 검색하면 기본적으로 PowerShell Core 버전의 항목이 표시됩니다. 왼쪽 항목 목록 위의 버전 드롭다운 목록을 사용하여 Windows PowerShell 버전으로 전환합니다.

  • 이전에는 Windows PowerShell에서 ASCII가 기본 인코딩이라고 잘못 기재되어 있었습니다.다행히 이 문제는 수정되었습니다.


다음과 같은 Cmdlet:

Out-File ★★★★★★★★★★★★★★★★★」>>>Unicode - UTF-16LE - 기본적으로 파일 생성 - 모든 ASCII 범위 문자(역시)는 2바이트로 표시되며, 이는 다음과 크게 다릅니다.Set-ContentAdd-Content점 ); (다음 점 참조);New-ModuleManifest ★★★★★★★★★★★★★★★★★」Export-CliXmlUTF-16LE가 있다.

Set-Content (그리고)Add-Content아직하지 않거나 있는 는 코드 , 를 호출합니다)를 사용합니다.Default를 참조해 주세요.

Export-Csv 파일을 만, 「ASCII의 노트 「ASCII」를 .-Appenddiscloss.d.

Export-PSSessionUTF-8은 BOM을 사용합니다.

New-Item -Type File -Value는 현재 BOM-less.

Send-MailMessage도움말 토픽에서는 ASCII 인코딩이 기본이라고 주장하고 있습니다.그 주장을 개인적으로 검증한 적은 없습니다.

Start-Transcript 반드시 BOM을 사용하여 UTF-8 파일을 작성하지만 참고 사항을 참조하십시오.-Appenddiscloss.d.

기존 파일에 추가되는 Re 명령:

>>Out-File -Append파일의 기존 콘텐츠 인코딩을 일치시키지 않습니다.즉, 다른 지시가 없는 한 기본 인코딩을 맹목적으로 적용합니다.-Encoding가 아닙니다.>>(에서는 으로 (PSv5.1+) $PSDefaultParameterValues(일부러).

Add-Content만한 인 「불필요」가 입니다.명시적인 것이 없는 경우-Encoding기존 인코딩을 검출하여 새로운 Thanks, js2010콘텐츠에 자동으로 적용합니다.Windows PowerShell에서는 기존 컨텐츠에 BOM이 없는 경우 ANSI 인코딩이 적용되지만 PowerShell Core에서는 UTF-8이 적용된다는 점에 유의하십시오.

「」의 이 .Out-File -Append>> ★★★★★★★★★★★★★★★★★」Add-ContentPowerShell Core에도 영향을 주는 GitHub 9423에 설명되어 있습니다.

Export-Csv -Append 는 기존 인코딩과 부분적으로 일치합니다.기존 파일의 인코딩이 ASCII/UTF-8/ANSI 중 하나이지만 UTF-16LE 및 UTF-16BE와 올바르게 일치하는 경우 UTF-8을 맹목적으로 추가합니다.
말하면, BOM이 , 「BOM」, 「BOM」, 「BOM」, 「BOM」이 없는 경우,Export-Csv -Append이 UTF-8인 UTF-8은 UTF-8이라고 가정하고 있습니다.Add-ContentANSI를 하고 있습니다.

Start-Transcript -Append 는 부분적으로 기존 인코딩과 일치합니다.인코딩과 BOM은 올바르게 일치하지만 인코딩이 없는 경우 기본적으로는 손실 가능성이 있는 ASCII 인코딩이 됩니다.


다음과 같은 Cmdlet(BOM이 없는 경우 사용되는 인코딩):

Get-Content ★★★★★★★★★★★★★★★★★」Import-PowerShellDataFileANSI)입니다.Default합니다.Set-Content.
ANSI는 PowerShell 엔진 자체가 파일에서 소스 코드를 읽을 때 기본 설정으로 설정됩니다.

by by by by byImport-Csv,Import-CliXml ★★★★★★★★★★★★★★★★★」Select-StringBOM의 UTF-8입니다.

요약하면 다음과 같습니다.

write-output "your text" | out-file -append -encoding utf8 "filename"

스크립트의 일부를 중괄호로 묶어서 몇 가지 명령어의 출력을 리다이렉트 할 수 있습니다.

{
  command 1
  command 2
} | out-file -append -encoding utf8 "filename"

출력 리디렉션이 포함된 Windows의 PowerShell을 사용하여 만든 덤프는 UTF-16 인코딩을 가진 파일을 생성합니다.이 문제를 해결하려면 다음을 시도해 보십시오.

mysqldump.exe [options] --result-file=dump.sql

참조 링크: mysqldump_result-file

언급URL : https://stackoverflow.com/questions/40098771/changing-powershells-default-output-encoding-to-utf-8

반응형