PowerShell 한글 깨짐, Windows PowerShell 5에서 UTF-8 BOM을 확인한 기록
10월 19일, 윈도우 PC에서 쇼츠 제작용 PowerShell 스크립트를 돌렸더니 한글이 깨져 나왔어요. 원인은 화면 글꼴이 아니라 스크립트 파일을 저장한 방식이었어요. 당시 조치는 .ps1 파일을 UTF-8 BOM으로 다시 저장하는 것이었어요.
같은 날 시험 영상은 음성 만들기부터 완성까지 약 8분 걸렸어요. 한글 문제만 고치는 데 든 시간과 비용은 따로 재지 않아서, 8분을 수정 시간으로 적지는 않을게요. 준비할 것은 문제가 난 .ps1 파일과, 저장할 때 인코딩을 고를 수 있는 편집기예요.
PowerShell 한글 깨짐은 왜 생겼나요?
컴퓨터는 글자를 숫자로 바꿔 파일에 저장해요. 이 바꾸는 규칙을 인코딩이라고 해요. 같은 숫자라도 어떤 규칙으로 읽느냐에 따라 한글이 되기도 하고 알아볼 수 없는 기호가 되기도 해요.
제가 쓴 건 윈도우에 들어 있는 Windows PowerShell 5였어요. 이 버전은 파일 맨 앞에 BOM이라는 표식이 없으면 UTF-8 파일을 예전 방식(ANSI)으로 읽어요. 그래서 UTF-8로 저장했는데도 BOM이 없던 스크립트의 한글이 깨졌어요. BOM은 “이 파일은 UTF-8이에요”라고 알려 주는 이름표라고 보면 쉬워요.
Microsoft 공식 문서도 한글처럼 영어가 아닌 글자가 든 스크립트는 Windows PowerShell에서 UTF-8 BOM으로 저장하라고 안내해요.
Windows PowerShell과 PowerShell 7은 같나요?
이름은 비슷하지만 기본값이 달라요. 공식 문서 내용과 제 기록을 표로 나눠 보면 이래요.
| 구분 | Windows PowerShell 5.1 | PowerShell 7 (6 이상) |
|---|---|---|
| 설치 | 윈도우에 기본으로 들어 있음 | 따로 설치 |
| 파일 쓰기 기본 인코딩 | 명령마다 다름 | BOM 없는 UTF-8 |
| BOM 없는 UTF-8 스크립트 | ANSI로 읽어 한글이 깨질 수 있음 | UTF-8로 읽음 |
| 제 기록 | 10월 19일 한글 깨짐, UTF-8 BOM으로 다시 저장 | 실행해 보지 않음 |
공식 문서는 BOM이 붙은 UTF-8 파일이 일부 유닉스 도구와는 잘 맞지 않을 수 있다고도 적어요. 그래서 모든 파일을 한꺼번에 바꾸자는 이야기는 아니에요. 제 사례는 Windows PowerShell 5에서 실행하는, 한글이 든 .ps1 파일에만 해당해요.
저장 형식은 어떤 순서로 확인하나요?
제가 실제로 한 건 UTF-8 BOM으로 다시 저장한 것까지예요. 아래 순서는 그 조치와 공식 설명을 처음 하는 사람 기준으로 풀어 쓴 거예요. 새 편집기에서 모든 단계를 다시 해 본 건 아니에요.
먼저 원본 파일을 복사해 두고, 어떤 PowerShell에서 실행하는지 확인해요. 다음으로 편집기에서 한글이 제대로 보이는지 봐요. 이미 깨진 글자를 그대로 다시 저장하면 원래 글자로 돌아오지 않거든요. 한글이 멀쩡하다면 저장 옵션에서 BOM이 있는 UTF-8을 골라 저장해요. 편집기마다 메뉴 이름과 위치가 달라서 여기서 단정하지는 않을게요.
마지막으로 실제 작업 전에, 한글 한 줄만 출력하는 작은 스크립트로 먼저 확인해요. 작업용 스크립트는 파일을 만들거나 프로그램을 실행하니까, 한글만 보려고 전체 작업을 다시 돌리는 건 피하는 편이 안전해요.
화면에 보이는 글자와 파일은 왜 따로 보나요?
이번 문제는 PowerShell이 .ps1 파일을 읽을 때 생겼어요. 콘솔 화면에 글자를 보여 주는 일, 다른 프로그램과 글자를 주고받는 일, 파일로 저장하는 일은 각각 다른 경로예요. 공식 문서에 따르면 $OutputEncoding은 다른 프로그램과 주고받는 글자에 영향을 주고, PowerShell 명령이 파일을 저장하는 방식은 바꾸지 않아요. 그래서 화면에서 한글이 잘 보인다고 저장된 파일까지 괜찮다고 볼 수는 없어요.
제 기록에는 윈도우 전체 설정을 바꿔서 해결했다는 내용이 없어요. 그래서 이 글에서도 그 방법은 넣지 않았어요.
되돌리는 법과 아직 모르는 것
되돌릴 때는 처음에 복사해 둔 원본 파일을 쓰면 돼요. 한글이 이미 깨진 채로 저장된 파일이라면, 저장 형식만 다시 바꿔서는 원래 문장이 돌아온다고 장담할 수 없어요. 깨지기 전 파일을 찾아야 해요. 이 복구까지 실제로 해 본 기록은 없어요.
용어가 낯설다면 이렇게 보면 돼요. 인코딩은 글자를 숫자로 바꾸는 규칙, BOM은 파일 맨 앞에 붙는 인코딩 이름표, .ps1은 PowerShell 스크립트 파일의 확장자예요.
제 기록은 UTF-8 BOM으로 다시 저장한 데까지예요. 다른 편집기로 다시 저장해도 그대로인지, PowerShell 7에서도 같은 파일이 문제없이 도는지는 아직 확인하지 못했어요.
확인 날짜 2026-10-25