한글 윈도우에서 이모지 하나로 프로그램이 죽습니다

AI에게 만들어 달라고 한 프로그램이 자꾸 멈춘다면 이걸 의심해 보세요

증상

잘 돌아가던 프로그램이 특정 상황에서 갑자기 멈추고 이런 메시지를 뱉습니다.

UnicodeEncodeError: 'cp949' codec can't encode character
'\U0001f525' in position 17: illegal multibyte sequence

\U0001f525가 🔥 이모지입니다. 이모지 하나 때문에 프로그램 전체가 죽은 겁니다.

왜 이런 일이

한글 윈도우의 명령 프롬프트(검은 창)는 기본 문자 규격이 cp949입니다. 한글은 표현할 수 있지만 이모지는 이 규격에 아예 없습니다.

그래서 화면에 이모지를 찍으려는 순간 "이 글자를 어떻게 출력할지 모르겠다"며 멈춥니다. 경고가 아니라 프로그램이 그 자리에서 끝납니다.

특히 잘 걸리는 경우 — 유튜브 제목, 상품명, 기사 제목처럼 바깥에서 가져온 글자를 화면에 그대로 찍을 때입니다. 제목에 🔥나 ✨가 붙어 있으면 그 순간 끝납니다.

해결 — 두 겹으로 막습니다

① 프로그램 맨 앞에서 출력 규격을 바꾼다

import sys
sys.stdout.reconfigure(encoding="utf-8", errors="replace")

errors="replace"가 핵심입니다. 표현 못 하는 글자가 와도 물음표로 바꿔서 찍고 계속 갑니다. 멈추지 않는다는 게 중요합니다.

② 화면에는 아예 이모지를 쓰지 않는다

①번으로 대부분 막히지만, 환경에 따라 여전히 깨져 보일 수 있습니다. 그래서 저는 화면 출력에는 이모지를 안 씁니다.

화면(검은 창)파일(md·html)
[OK] [부분] [실패]🟢 🟡 🔴 마음껏

파일은 프로그램이 직접 UTF-8로 쓰기 때문에 이모지가 안전합니다. 깨지는 건 검은 창뿐입니다.

비슷한 지뢰 두 개 더

대상규칙안 지키면
.bat 파일 내용은 영문만. 줄바꿈은 CRLF 한글 안내문을 넣으면 명령 프롬프트가 한글 바이트를 명령으로 착각해 "…은(는) 내부 또는 외부 명령이 아닙니다"
.ps1 파일 저장할 때 UTF-8 (BOM 포함) BOM이 없으면 한글 문자열이 깨져서 출력

그럼 배치 파일에서 한글 안내를 어떻게 보여주냐면 — 안내는 파이썬이 출력하게 하면 됩니다. 배치 파일은 파이썬을 부르는 역할만 하고, 사람이 읽는 한글은 전부 파이썬 쪽에 둡니다.

만들고 나서 꼭 확인하세요

"영문만 썼습니다"라는 말을 믿지 말고 직접 세어 보는 게 확실합니다.

python -c "b=open('파일명.bat','rb').read(); \
print('한글 등 비영문:', len([x for x in b if x>127])); \
print('CRLF:', b.count(b'\r\n'), '/ 단독 LF:', b.count(b'\n')-b.count(b'\r\n'))"

비영문 0 / 단독 LF 0이면 통과입니다. AI에게 만들어 달라고 했을 때도 이 한 줄로 검증하면 나중에 헤맬 일이 줄어듭니다.

정리

아이엠 조차장 · AI 도구로 업무 다이어트하는 법을 기록합니다