한국어 맞춤법에서 띄어쓰기는 장식이 아니라 문법 규칙입니다 — "아버지가방에들어가신다"처럼 띄어쓰기 하나로 문장의 뜻 자체가 바뀔 수 있습니다. 그래서 한국어 텍스트에서는 일반 스페이스와 눈에 안 보이는 특수 공백 문자가 섞여 있으면, 단순히 미관 문제가 아니라 실제로 검색이나 문자열 비교가 어긋나는 원인이 됩니다.
이것이 이상한 버그를 일으키는 이유
가장 전형적인 예는 화면의 텍스트가 동일해 보여도 문자열 비교가 예상치 못하게 "같지 않음"을 반환하는 경우입니다. 원인은 대개 한 문자열에는 일반 스페이스가, 다른 문자열에는 워드 문서나 웹페이지 등에서 복사된 줄바꿈 없는 공백이 있기 때문입니다. 시각적으로는 차이가 없지만 컴퓨터에게는 차이가 있습니다.
Trim
Trim은 문자열의 시작과 끝에서 공백 문자를 제거하고 중간 내용은 그대로 둡니다. 이는 사용자 입력을 정리하는 표준 작업입니다 — 폼 필드 시작 부분의 의도치 않은 여분의 공백이 값의 비교나 검증에 영향을 주어서는 안 됩니다.
공백 합치기
또 다른 흔한 작업은 연속된 여러 공백 문자를 하나로 바꾸는 것입니다. 이는 PDF나 표 같은 서식이 있는 소스에서 복사한 텍스트에 유용합니다. 그런 소스에서는 하나의 공백 대신 이중 공백이나 의도치 않은 탭이 나타날 수 있습니다.
이 기능이 필요한 이유
- 겉보기에 동일한 두 문자열의 비교가 왜 실패하는지 진단하기.
- 다른 소스에서 복사한 텍스트를 여분의 보이지 않는 문자로부터 정리하기.
- 데이터베이스에 저장하기 전에 사용자 입력을 정규화하기.
폭이 0인 문자
눈에 보이는 공백 문자 외에도 폭이 0인 문자(zero-width space, zero-width joiner)가 있습니다 — 이들은 화면에서 전혀 공간을 차지하지 않지만 텍스트 안에 독립된 문자로 존재합니다. 이런 문자는 특정 웹사이트나 메신저에서 복사할 때 텍스트에 섞여 들어가는 경우가 있으며, 텍스트 편집기에서조차 완전히 보이지 않는 채로 남아 문자열 비교나 검색을 눈치채지 못하게 망가뜨릴 수 있습니다.