특수 유니코드 문자

Suhyeon Lee·2025년 6월 6일

GPT 텍스트에 의도적으로 특수 공백을 넣는다는 이야가가 인스타그램에 나오길래 찾아보니 루머라는 걸 알게 되었다.
모델이 훈련 중 학습한 데이터의 일부 특수문자가 출력된 것일 뿐, GPT가 의도적으로 문장에 워터마크를 심는 방식이 아니었다고 한다.(https://kyr-db.tistory.com/836 참고)
하지만 이참에 특수 문자에 대해 알아두면 좋을 것 같기도 하고, 데이터 처리 과정에서 문제가 될 수 있을 것 같아 정리해둔다.

좁은 비분리 공백(A narrow no-break space, NNBSP)

  • U+202F
    • Unicode character (U+202F) that is a non-breaking space, but with a smaller width than the standard non-breaking space (U+00A0)
  • 겉으로는 보이지 않으며 일반 텍스트 편집기에서는 확인 불가능
    • 시각적으로 일반 공백과 거의 같아서 눈으로 잘 구별되지 않는다고 함!
      (' ' : 좁은 공백, ' ' : 공백 → 어째서인지 velog에서는 잘 구별되는 것 같다…)
    • 메모장에 붙여 넣으면 보통 일반 공백(U+0020)으로 자동 치환되거나 깨져(nnbsp, □ 등) 보이는데 이는 메모장이 오래된 렌더링 시스템을 사용하며, 좁은 공백과 같은 비표준 유니코드를 시각화하지 못하기 때문이라고 함
    • Sublime Text, VS Code, 온라인 유니코드 뷰어, 텍스트 분석 툴을 활용하면 볼 수 있다고 함
      • VS code: Ctrl + Shift + P → Toggle Render Whitespace 을 설정하면, 공백을 다음과 같이 표시할 수 있음

공백 문자의 너비는 한 가지가 아니라 다양하다!
https://en.wikipedia.org/wiki/Whitespace_character

폭 없는 공백(Zero Width Space, ZWSP)

  • '제로 너비 공간'이라고도 부름
  • U+200B
    • 글자 간 간격을 조절하거나, 문장 내에서 가로 방향으로 줄바꿈을 허용할 때 사용

비교

  • U+200B는 눈에 보이지 않는 간격 조절 및 줄바꿈 용도로, U+202F는 실제 공간을 차지하며 텍스트 간의 간격을 확보하는 용도로 사용
  • U+200B (제로 와이드 스페이스)
    • Zero width
      • 실제 공간을 차지하지 않으며, 눈에 보이지 않음
    • 간격 조절
      • 글자 사이에 삽입하여 글자 간격을 조절하거나, 텍스트 줄바꿈을 가능하게 함
    • 가로 방향 줄바꿈
      • 웹 페이지에서 텍스트가 특정 길이에 도달했을 때 줄을 바꿔야 할 경우, U+200B을 삽입하여 가로 방향으로 줄바꿈이 가능하도록 설정할 수 있음
    • 활용
      • 주로 웹 페이지에서 텍스트를 스타일링하거나, 다국어 텍스트를 표시할 때 사용
// NORMAL
보라돌이뚜비나나뽀

// SPACE
보라돌이 뚜비 나나 뽀

// ZERO_WIDTH_SPACE
보라돌이​뚜비​나나​뽀
  • U+202F (좁은 스페이스)
    • 좁은 공간
      • 실제 공간을 차지하며, 눈에 보임
    • 간격 확보
      • 글자 사이에 삽입하여 텍스트 간의 간격을 확보합니다.
    • 줄바꿈 유지
      • 텍스트를 줄바꿈할 때 U+202F가 삽입되어 줄바꿈 시에도 간격이 유지되도록 함
    • 활용
      • 텍스트를 정렬하거나, 다국어 텍스트를 표시할 때 사용

그 외

  • 제로 너비 비조인자 (Zero Width Non-Joiner, ZWNJ) - U+200C
    • 설명: 아랍어나 힌디어와 같은 언어에서 두 문자가 결합되는 것을 방지합니다. 결합되지 않는 상태로 두 문자를 표시합니다.
    • 용도: 문자 결합 방지, 특정 글자 형태 유지
  • 제로 너비 조인자 (Zero Width Joiner, ZWJ) - U+200D
    • 설명: 아랍어, 힌디어 등에서 두 문자가 결합되는 것을 촉진합니다. 결합된 형태로 두 문자를 표시합니다.
    • 용도: 문자 결합 촉진, 이모지 결합
  • 제로 너비 비브레이크 공간 (Zero Width No-Break Space, ZWNBSP) - U+FEFF
    • 설명: 줄 바꿈을 방지하는 보이지 않는 간격입니다. 보통 BOM(Byte Order Mark)로 사용되며, 파일의 바이트 순서를 표시합니다.
    • 용도: 줄 바꿈 방지, 파일의 바이트 순서 표시
  • 왼쪽에서 오른쪽 표시 (Left-to-Right Mark, LRM) - U+200E
    • 설명: 텍스트의 방향을 좌에서 우로 강제합니다.
    • 용도: 텍스트 방향 제어
  • 오른쪽에서 왼쪽 표시 (Right-to-Left Mark, RLM) - U+200F
    • 설명: 텍스트의 방향을 우에서 좌로 강제합니다.
    • 용도: 텍스트 방향 제어
  • 단어 결합자 (Word Joiner, WJ) - U+2060
    • 설명: 줄 바꿈 없이 단어를 연결합니다.
    • 용도: 줄 바꿈 방지
  • 보이지 않는 구분자 (Invisible Separator) - U+2063
    • 설명: 보이지 않는 구분자로 사용됩니다.
    • 용도: 논리적 구분
  • 소프트 하이픈 (Soft Hyphen, SHY) - U+00AD
    • 설명: 줄 바꿈 시 하이픈을 표시하지만, 줄 바꿈이 없을 경우 보이지 않습니다.
    • 용도: 하이픈 표시 제어

제로 너비 문자는 보이지 않기 때문에 데이터 입력 시 실수로 포함될 수 있으며, 이는 데이터 무결성에 영향을 줄 수 있습니다(데이터 무결성 문제).
검색어에 제로 너비 문자가 포함되면 일치하는 결과가 나오지 않을 수 있습니다(검색 및 매칭 문제).
데이터 전처리 과정에서 예상치 못한 동작을 일으킬 수 있습니다(데이터 처리 문제).

어떻게 제거할까?

profile
2 B R 0 2 B

0개의 댓글