유니코드 공백·보이지 않는 문자 총정리
화면에는 안 보이는데 분명히 존재하는 문자들. 어디서 생기고, 무슨 문제를 일으키고, 어떻게 찾아 지우는지 한 번에 정리했습니다.
보이지 않는 문자는 왜 생기나요?
유니코드에는 화면에 아무것도 그리지 않으면서 "여기서 줄을 바꾸지 마라", "여기서 단어를 끊어도 된다" 같은 지시만 담는 문자가 여럿 있습니다. 원래는 조판이나 다국어 처리를 위해 만들어진 것이지만, 요즘은 전혀 다른 경로로 일상 문서에 흘러 들어옵니다.
- 웹페이지 복사 — 사이트 레이아웃용으로 넣은 NBSP나 제로폭 공백이 텍스트와 함께 딸려 옵니다.
- 워드·한글 문서 — "줄바꿈 없는 공백" 기능을 쓰면 NBSP가, 자동 하이픈 기능을 쓰면 소프트 하이픈이 들어갑니다.
- AI 생성 텍스트 — ChatGPT, Claude 등은 학습 데이터에 섞여 있던 특수 공백과 스마트 따옴표를 그대로 출력하는 경우가 있습니다.
- 이메일·메신저 — 서식 있는 메일을 텍스트로 변환하면서 특수 공백이 남습니다.
- PDF 텍스트 추출 — PDF의 글자 간격을 표현하던 문자가 공백처럼 변환됩니다.
종류별 정리표
아래 표의 코드는 유니코드 코드포인트(U+ 뒤의 16진수)입니다. 코드 편집기나 검색 도구에서 이 값으로 찾을 수 있습니다.
| 이름 | 코드 | 원래 용도 | 일으키는 문제 |
|---|---|---|---|
| 제로폭 공백 (Zero Width Space) | U+200B | 줄바꿈 가능 지점 표시 | 검색 불일치, 글자수 오차, ID·비밀번호 입력 실패 |
| 제로폭 비접합자 | U+200C | 아랍어 등에서 글자 결합 방지 | 같은 단어가 다른 문자열로 인식됨 |
| 제로폭 접합자 | U+200D | 이모지·인도계 문자 결합 | 이모지 조합이 깨지거나 문자열 비교 실패 |
| 단어 결합자 (Word Joiner) | U+2060 | 줄바꿈 금지 | 제로폭 공백과 같은 문제 |
| BOM (Byte Order Mark) | U+FEFF | 파일 인코딩 표시 | CSV 첫 열 이름 깨짐, 스크립트 첫 줄 오류 |
| 소프트 하이픈 | U+00AD | 줄 끝에서만 보이는 하이픈 | 단어 중간에 보이지 않는 문자가 끼어 검색 실패 |
| NBSP (줄바꿈 없는 공백) | U+00A0 | 숫자와 단위 사이 등 줄바꿈 방지 | 엑셀에서 숫자가 텍스트로 인식, trim() 미적용 |
| 좁은 NBSP | U+202F | 프랑스어 문장부호 앞 등 | NBSP와 동일, AI 출력에 자주 등장 |
| 전각 공백 | U+3000 | 동아시아 조판용 한 글자 폭 공백 | 일반 공백보다 넓어 정렬이 어긋남 |
| 타이포그래피 공백 | U+2000~200A | 인쇄용 다양한 폭의 공백 | 공백으로 인식되지 않아 검색·분리 실패 |
| 방향 제어 문자 | U+200E, U+200FU+202A~202E | 아랍어·히브리어 좌우 방향 지정 | 텍스트 순서가 뒤집혀 보이거나 보안 경고 |
내 문서에 있는지 확인하는 방법
가장 빠른 방법은 AI 공백 제거기에 붙여넣는 것입니다. 어떤 문자가 몇 개 있는지 코드와 함께 보여줍니다. 도구 없이 확인하려면 다음 방법도 있습니다.
- VS Code — 기본 설정으로 제로폭 공백과 NBSP를 노란 테두리로 강조해서 보여줍니다.
editor.renderControlCharacters가 켜져 있는지 확인하세요. - 브라우저 검사 도구 — 요소 검사(F12)에서 텍스트를 선택하면
,​같은 엔티티로 표시됩니다. - 엑셀·구글 시트 —
=CODE(MID(A1, n, 1))로 n번째 글자의 코드를 확인할 수 있습니다. 160이면 NBSP, 8203이면 제로폭 공백입니다. - 정규식 검색 — 텍스트 편집기에서
[\u200B-\u200F\u2060\uFEFF\u00A0\u202F\u3000]로 검색하면 한 번에 찾습니다.
지우는 방법
워드·한글에서는 찾기·바꾸기에서 특수문자를 직접 입력하기 어렵기 때문에, 텍스트를 도구에 붙여넣어 정리한 뒤 다시 붙여넣는 방식이 가장 확실합니다. 코드 편집기라면 위 정규식으로 찾아 빈 문자열이나 일반 공백으로 바꾸면 됩니다. 엑셀에서는 =SUBSTITUTE(A1, CHAR(160), " ")로 NBSP를 일반 공백으로 바꿀 수 있지만, 제로폭 공백은 CHAR 함수로 표현할 수 없어 =SUBSTITUTE(A1, UNICHAR(8203), "")를 써야 합니다.
함께 읽으면 좋은 글
- 복사·붙여넣기 후 생기는 오류 7가지와 해결법 — 위 문자들이 실제로 어떤 사고를 치는지
- AI 티 안 나게 글 다듬는 법 체크리스트 7가지 — 특수문자 제거 이후 문체 다듬기