programing

PowerShell의 UTF8 스크립트가 잘못된 문자를 출력함

codeshow 2023. 8. 5. 11:07
반응형

PowerShell의 UTF8 스크립트가 잘못된 문자를 출력함

ASCII가 아닌 문자로 PowerShell용 UTF8 스크립트를 만들었습니다.

characters.ps1:

Write-Host "ç â ã á à"

PowerShell 콘솔에서 스크립트를 실행하면 잘못된 문자가 출력됩니다.

enter image description here

그러나 콘솔에 직접 문자를 쓰면 예상대로 문자가 표시됩니다.

enter image description here

무엇이 그런 행동을 일으키는지 아는 사람?

ASCII가 아닌 문자가 포함된 경로를 하드코딩한 제가 작성한 스크립트에서 문제가 발생했습니다.경로를 cmdlet에 인수로 전달하려고 하면(폴더를 로보카피하려는 경우) 명령이 경로를 찾을 수 없기 때문에(화면에서 잘못 출력됨) 실패합니다.

BOM을 사용하여 스크립트 인코딩을 UTF-8로 변경하여 문제를 해결했습니다.

나는 Sublime을 사용했습니다.인코딩이 있는 텍스트스크립트의 문자 집합을 제어하는 도우미 플러그인입니다.UTF8로 올바르게 설정되었습니다.

Sublime에서 스크립트의 인코딩을 변경했습니다."UTF-8 with BOM"의 텍스트와 출력이 올바르게 표시되었습니다.

저는 기본적으로 "UTF-8 with BOM"으로 설정된 메모장++로 동일한 스크립트를 만들었고, 콘솔에 문자열이 올바르게 표시되었습니다.

메모장++에서 스크립트 인코딩을 "로 변경했습니다.UTF-8 without BOM"이라는 문구가 잘못 표시되었습니다.

PowerShell은 BOM이 없는 UTF-8 파일의 인코딩을 정확하게 추측할 수 없는 것 같습니다.

이 문제는 BOM 없이 UTF-8의 기본 인코딩을 가진 Visual Studio Code로 새 PowerShell 스크립트를 생성함으로써 발생했습니다.인코딩을 "Windows 1252"로 설정하여 문제를 해결했습니다.

PowerShell은 BOM이 없으면 UTF-8을 처리할 수 없는 것 같습니다. "Windows 1252" 또는 "BOM이 있는 UTF8" 인코딩이 필요합니다.

utf8 바이러스를 탐지하는 믿을 수 있는 방법이 있습니다(https://unicodebook.readthedocs.io/guess_encoding.html) .다른 많은 작은 것들과 마찬가지로, 이것은 PS 6에서 더 잘 작동하는 것처럼 보입니다. 심지어 제가 사랑하는 윈도우용 emacs 25조차도 인코딩을 잘못합니다.

PS C:\users\admin> pwsh
PowerShell 6.1.0
Copyright (c) Microsoft Corporation. All rights reserved.

https://aka.ms/pscore6-docs
Type 'help' to get help.

PS C:\users\admin> "write-host 'ç â ã á à'" | set-content -Encoding utf8NoBOM accent.ps1
PS C:\users\admin> .\accent
ç â ã á à

스크립트를 호출하기 전에 이 작업을 수행합니다.

 $OutputEncoding = [Console]::OutputEncoding

언급URL : https://stackoverflow.com/questions/14482253/utf8-script-in-powershell-outputs-incorrect-characters

반응형