파워쉘에서 윈도우의 내부 기능을 사용하여 변경하는 방법이다.
서브폴더를 포함한 특정 파일유형을 모두 찾아서 변환해 준다.
# 변환할 인코딩 설정 (EUC-KR = Code Page 949)
#$sourceEncoding = [System.Text.Encoding]::GetEncoding(949)
$sourceEncoding = [System.Text.Encoding]::Unicode
$targetEncoding = [System.Text.Encoding]::UTF8
# 검색할 확장자들
#$extensions = @("*.c", "*.cpp", "*.h", "*.hpp")
$extensions = @("*.xml")
# 현재 디렉토리 및 하위 폴더 탐색
foreach ($ext in $extensions) {
Get-ChildItem -Recurse -Filter $ext | ForEach-Object {
Write-Host "변환 중: $($_.FullName)"
try {
$content = [System.IO.File]::ReadAllText($_.FullName, $sourceEncoding)
[System.IO.File]::WriteAllText($_.FullName, $content, $targetEncoding)
} catch {
Write-Warning "변환 실패: $($_.FullName) - $_"
}
}
}
위의 예제는 Unicode를 UTF-8 로 변환한다. 만약 EUC-KR 또는 CP949를 UTF-8 로 변경하고자 한다면 2번째 행의 코멘트를 제거하고 3번째를 코멘트롤 막으면 된다.
변환할 확장자를 바꾸려면 7번, 8번행을 참고한다.