포스트

윈도우 터미널 한글 깨짐 — 코드페이지와 전각/반각의 차이

한글 깨짐을 코드페이지·IME 조합·전각 문자 세 층위로 구분해 각각의 원인과 해결을 정리.

윈도우 터미널 한글 깨짐 — 코드페이지와 전각/반각의 차이

“한글이 깨진다”는 하나의 증상이 아니라 층위가 다른 세 문제다. 출력이 ???로 나오면 코드페이지(인코딩) 문제, 자모가 풀리면 입력기(IME) 조합 문제, 영문이 넓게 벌어지면서 명령까지 안 먹으면 전각 문자가 실제로 입력된 것이다. 어느 층에서 깨지는지부터 구분해야 고칠 수 있다.

코드페이지: 출력이 ???로 깨질 때

터미널은 바이트를 문자로 되돌릴 때 “코드페이지”라는 인코딩 규칙을 쓴다. 프로그램이 UTF-8(코드페이지 65001)로 바이트를 뱉었는데 터미널이 CP949(EUC-KR, 949)로 해석하면, 같은 바이트가 엉뚱한 글자나 ???로 나온다. 반대 방향도 마찬가지다. 즉 깨짐은 “쓴 인코딩 ≠ 읽는 인코딩”의 불일치에서 생기지, 데이터 자체가 손상된 게 아니다.

현재 코드페이지는 chcp로 확인한다.

1
chcp
  • 949 — CP949 / EUC-KR (한국어 Windows 기본)
  • 65001 — UTF-8

출력한 쪽과 읽는 쪽의 번호가 어긋나 있으면 깨진다. 한쪽을 상대에 맞추면 정상으로 돌아온다.

IME 조합: 자모가 풀리거나 글자가 겹칠 때

타이핑 중 “한글”이 “ㅎㅏㄴㄱㅡㄹ”처럼 자모로 분리되거나 글자가 두 번씩 찍히는 건 인코딩이 아니라 입력 조합 단계의 충돌이다. PowerShell의 PSReadLine 예측 입력(Predictive IntelliSense)이 켜져 있으면, 조합 중인 미완성 한글 글자와 예측 표시가 부딪쳐 이렇게 된다.

1
Set-PSReadLineOption -PredictionSource None

영구 적용은 $PROFILE에 이 줄을 추가한다.

전각 문자: 영문이 넓어지고 명령이 안 먹을 때

영문이 한 글자당 2칸씩 벌어지고 exitnot recognized로 튕기면, 폭 설정이나 글꼴 문제가 아니라 입력된 문자 자체가 전각(全角)으로 바뀐 것이다.

1
2
❯ exit
exit : The term 'exit' is not recognized as the name of a cmdlet ...

exit는 보통의 exit가 아니라 유니코드 전각 라틴 문자(U+FF45 계열, FULLWIDTH LATIN SMALL LETTER E)다. 한글 같은 CJK 문자처럼 한 글자가 2칸을 차지하는 완전히 다른 코드포인트라, 넓게 보이는 동시에 셸이 명령어로 인식하지 못한다. 원인은 한글 IME의 전각 입력 모드가 켜진 것.

  • 작업표시줄 IME 아이콘(한/A) 우클릭 → “반각/전각(반자/전자)”을 반각(반자)으로 변경
  • Shift + Space가 전각/반각 토글로 잡혀 있으면 한 번 눌러 되돌아오기도 함

메모장에 영문을 쳐보면 층위가 갈린다. 거기서도 넓게 나오면 IME 전각 모드(시스템 전역), 터미널에서만 그러면 터미널 쪽 설정 문제다.

왜 헷갈리는가 — 넓어 보이는 세 가지가 다르다

“영문이 넓다”는 표면 증상 하나에 원인이 겹쳐 있다. Windows Terminal의 모호한 폭(ambiguous width) 설정이나 비고정폭 글꼴(굴림·바탕 등)로 바뀌어도 넓어 보이고, 전각 문자가 입력돼도 넓어 보인다. 결정적 구분점은 명령이 실행되느냐다. 글꼴·폭 문제면 글자만 넓을 뿐 exit는 동작하고, 전각 문자면 명령 자체가 다른 코드포인트라 실행이 실패한다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.