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에게 만들어 달라고 했을 때도 이 한 줄로 검증하면 나중에 헤맬 일이 줄어듭니다.
reconfigure(encoding="utf-8", errors="replace")[OK], 파일엔 🟢 — 이렇게 나누면 안전합니다아이엠 조차장 · AI 도구로 업무 다이어트하는 법을 기록합니다