보이지 않는 문자 탐지기
제어 문자, NBSP, 너비 없는 문자와 양방향 표식을 위치 및 코드 포인트로 확인합니다.
텍스트 안에 숨어 있는 제어 문자, 특수 공백, 너비 없는 문자, 양방향 표식을 찾아 위치와 코드 포인트로 보여 줍니다.
사용 순서
- 검사할 텍스트를 입력창에 붙여 넣습니다.
- 발견한 문자 수와 위치 목록을 확인합니다.
- 이전, 다음 버튼으로 100개 단위 결과를 넘겨 보고, 필요한 위치를 원본에서 찾아 고칩니다.
예시
입력 "😀A" 뒤에 U+200B(ZERO WIDTH SPACE)가 있으면 위치 2, 코드 포인트 U+200B로 표시됩니다. 이모지 하나도 위치 한 칸으로 계산합니다.
한계
위치는 0부터 세는 코드 포인트 기준이라 JavaScript의 문자열 인덱스와 다를 수 있습니다. 줄바꿈(LF, CR)과 탭도 제어 문자로 함께 표시되므로 여러 줄 입력에서는 결과가 실제보다 많아 보입니다. 문자를 지우거나 고치지 않으며, 탐지 대상은 정해진 문자 집합에 한정됩니다.
보안 주의
양방향 표식(U+202A~U+202E, U+2066~U+2069)은 화면에서 글자 순서를 실제와 다르게 보이게 만들어 코드의 실제 동작을 가릴 수 있습니다. 탐지 결과가 나오면 화면에 보이는 모양만 믿지 말고 표시된 위치로 원본을 확인하세요.
배경 지식
보이지 않는 문자는 화면에서는 빈칸이나 아무것도 없는 것처럼 보이지만 실제로는 코드 포인트를 차지합니다. 대표적으로 너비 없는 공백(U+200B), 줄바꿈 없는 공백(NBSP, U+00A0), 소프트 하이픈(U+00AD)이 있습니다. 이런 문자는 문자열 비교를 어긋나게 하고, 검색과 파싱에서도 원인을 찾기 어려운 실패를 만듭니다.
양방향 표식은 아랍어나 히브리어처럼 오른쪽에서 왼쪽으로 쓰는 문자를 섞을 때 쓰는 제어 문자입니다. 2021년에는 이 표식을 이용해 소스 코드의 화면 표시와 실제 실행 순서를 다르게 만드는 공격 기법이 공개되었습니다. 그래서 코드 리뷰에서 눈에 띄지 않는 변경을 찾을 때도 이 문자를 확인합니다.
복사한 명령어나 웹 페이지 본문에는 이런 문자가 섞여 들어오는 일이 흔합니다. 명령이 실패하거나 설정 키가 일치하지 않을 때 가장 먼저 의심해 볼 만한 원인입니다. 탐지기는 위치만 알려 줄 뿐 지우지 않으므로, 어떤 문자가 의도된 것인지 판단하는 일은 사람이 해야 합니다.
자주 묻는 질문
줄바꿈이 제어 문자로 표시되는 이유는 무엇인가요?
LF(U+000A), CR(U+000D), 탭(U+0009)은 C0 제어 문자 범위에 속하므로 탐지 규칙에 함께 잡힙니다. 줄바꿈 자체는 문제가 아니므로 CONTROL 항목은 무시하고 이름이 붙은 문자만 확인하면 됩니다.
이모지 조합에서도 특정 문자가 보이나요?
이모지는 제어 문자가 아니므로 목록에 나오지 않습니다. 다만 여러 이모지를 이어 붙이는 ZERO WIDTH JOINER(U+200D)는 목록에 표시되므로, 이모지 조합이 많은 텍스트에서는 이 문자가 여러 번 나올 수 있습니다.
탐지된 문자를 자동으로 지울 수 있나요?
이 도구에는 삭제 기능이 없습니다. 위치와 코드 포인트를 기준으로 원본 편집기에서 직접 찾아 지우는 방식으로 처리하세요.