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 Core(v6+) 에디션에 대해서는 다음 섹션을 참조하십시오.
두 경우 모두 이 정보는 PowerShell이 UTF-8을 사용하여 파일을 읽고 쓰도록 하는 데 적용됩니다.
현재(Windows 10 의 최신 버전 이후) 시스템 전체에서 UTF-8 로의 전환이 가능합니다.이 답변은 참조해 주십시오.다만, 다음의 주의 사항에 주의해 주세요.
- 및 OEM ANSI로 에 이 .
65001
(UTF-8 등) 또한 이 문서에서는 이 기능이 베타 기능으로 간주되고 있습니다(Windows 11 22H2). - 윈도우즈 PowerShell에서 이 기능은 ANSI 코드 페이지로 기본 이동하는 cmdlet에만 적용됩니다.
Set-Content
, 그러나 아니다.Out-File
>
파일 읽기에도 적용됩니다.특히 다음과 같습니다.Get-Content
PowerShell 자체에서 소스 코드를 읽는 방법에 대해 설명합니다.
- 및 OEM ANSI로 에 이 .
Windows PowerShell의 관점:
PSv5.1 이후로는
>
★★★★★★★★★★★★★★★★★」>>
는 사실상 입니다.Out-File
프리퍼런스 변수를 사용하여 //의 디폴트 부호화를 설정할 수 있습니다.$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
- ★★★★
PSv5.0 이하에서는 / 의 부호화를 변경할 수 없습니다만, PSv3 이후에서는, 에의 명시적인 콜에 대해서 상기의 기술이 기능합니다.
(the)$PSDefaultParameterValues
PSv3.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:
PowerShell은 PowerShell Core 에디션을 통해 크로스 플랫폼이 되었습니다.이 버전의 인코딩은 Unix와 같은 플랫폼에 따라 BOM-less UTF-8로 기본 설정됩니다.
, 되며, BOM을 사용하면 UTF-8을 사용할 수 있습니다.
>
Out-File
Set-Content
디폴트로는 BOM-less UTF-8로 설정되어 있습니다.utf8
-Encoding
인수도 BOM-less UTF-8을 작성하지만, 이 명령어를 사용하여 의사 BOM을 사용하여 파일을 작성할 수 있습니다.utf8bom
discloss.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-Content
Add-Content
점 ); (다음 점 참조);New-ModuleManifest
★★★★★★★★★★★★★★★★★」Export-CliXml
UTF-16LE가 있다.
Set-Content
(그리고)Add-Content
아직하지 않거나 있는 는 코드 , 를 호출합니다)를 사용합니다.Default
를 참조해 주세요.
Export-Csv
파일을 만, 「ASCII의 노트 「ASCII」를 .-Append
discloss.d.
Export-PSSession
UTF-8은 BOM을 사용합니다.
New-Item -Type File -Value
는 현재 BOM-less.
Send-MailMessage
도움말 토픽에서는 ASCII 인코딩이 기본이라고 주장하고 있습니다.그 주장을 개인적으로 검증한 적은 없습니다.
Start-Transcript
반드시 BOM을 사용하여 UTF-8 파일을 작성하지만 참고 사항을 참조하십시오.-Append
discloss.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-Content
PowerShell 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-Content
ANSI를 하고 있습니다.
Start-Transcript -Append
는 부분적으로 기존 인코딩과 일치합니다.인코딩과 BOM은 올바르게 일치하지만 인코딩이 없는 경우 기본적으로는 손실 가능성이 있는 ASCII 인코딩이 됩니다.
다음과 같은 Cmdlet(BOM이 없는 경우 사용되는 인코딩):
Get-Content
★★★★★★★★★★★★★★★★★」Import-PowerShellDataFile
ANSI)입니다.Default
합니다.Set-Content
.
ANSI는 PowerShell 엔진 자체가 파일에서 소스 코드를 읽을 때 기본 설정으로 설정됩니다.
by by by by byImport-Csv
,Import-CliXml
★★★★★★★★★★★★★★★★★」Select-String
BOM의 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
'programing' 카테고리의 다른 글
bash 명령을 사용하여 CPU 스파이크를 생성하는 방법 (0) | 2023.04.17 |
---|---|
Posh-Git에서 "git status" 출력 색상 변경 (0) | 2023.04.17 |
Swift iOS 앱에서 상태 표시줄을 숨기려면 어떻게 해야 합니까? (0) | 2023.04.17 |
PowerShell 스크립트를 사용하여 EXE 파일 실행 (0) | 2023.04.17 |
지정된 디렉토리에서 파일만 찾고 bash를 사용하여 하위 디렉토리를 무시하는 방법 (0) | 2023.04.17 |