← 문자 도감으로 돌아가기
유니코드 연구실

Zalgo 문자는 왜 위아래로 자랄까?

Zalgo 문자는 일반 글자에 결합 부호를 과도하게 쌓은 것입니다. 부호의 위치, 정규화로 사라지지 않는 이유와 레이아웃 문제를 알아봅니다.

문자 현미경

샘플을 편집해 화면에 보이는 내용을 이루는 코드 포인트를 확인하세요.

보이는 각 글자 뒤에 여러 결합 부호가 있습니다. 보통 가로 폭을 더하지 않으므로 같은 위치에 여러 개를 쌓을 수 있습니다.

24 개 코드 포인트5 개 표시 단위
  1. U+005A
  2. U+0334
  3. U+0321
  4. U+031B
  5. U+032B
  6. U+0339
  7. U+033F
  8. U+0061
  9. U+0335
  10. U+0321
  11. U+0333
  12. U+030B
  13. U+006C
  14. U+0334
  15. U+0319
  16. U+0313
  17. U+0067
  18. U+0336
  19. U+0324
  20. U+0308
  21. U+006F
  22. U+0337
  23. U+031C
  24. U+033D

Zalgo 문자는 글꼴이 줄 상자 밖으로 탈출한 것처럼 보입니다.

Z̴̡̛̫̹̿a̵̡̳̋l̴̙̓g̶̤̈o̷̜̽

이미지가 아니며, 보통 글꼴이 손상된 것도 아닙니다. 일반 기본 문자 뒤에 많은 결합 부호를 붙여 만드는 효과입니다.

결합 부호의 원래 역할

세계의 문자 체계에는 악센트, 모음 기호, 성조, 낭송 기호처럼 이웃 문자와 관계된 표시가 필요합니다. 유니코드는 그중 많은 것을 간격을 차지하지 않는 결합 문자로 인코딩합니다.

는 두 방법으로 표현할 수 있습니다.

  • 미리 결합된 U+00E9 LATIN SMALL LETTER E WITH ACUTE
  • U+0065 LATIN SMALL LETTER E 뒤에 U+0301 COMBINING ACUTE ACCENT

두 번째 코드 포인트가 첫 번째를 꾸밉니다. 렌더링 엔진은 커서를 일반 문자 폭만큼 이동하지 않고 기본 글자 위에 악센트를 배치합니다.

Zalgo 생성기는 이 원리를 이용해 정상 철자보다 훨씬 많은 부호를 글자 위, 아래와 가운데에 추가합니다.

왜 그렇게 높이 쌓일까?

결합 문자에는 기본 문자 주변에서 순서를 정하는 정규 결합 클래스가 있습니다. 글꼴은 흔한 조합을 위한 고정점을 제공합니다. 매우 길거나 드문 시퀀스에서는 렌더러가 가능한 방식으로 처리합니다.

어떤 글꼴은 가지런히 쌓지만, 다른 글꼴은 부호가 충돌하거나 옆 줄을 덮고 버튼 밖으로 나옵니다. 텍스트 자체는 유효해도, 한 글자에 악센트 수십 개를 놓는 화면은 설계되어 있지 않습니다.

브라우저와 운영체제마다 결과가 달라지는 이유도 같습니다. 유니코드는 문자와 속성을 정하고 글꼴은 정확한 모양과 위치를 정합니다.

정규화는 ‘악센트 삭제’가 아니다

유니코드 정규화는 동등한 시퀀스 비교를 돕습니다. NFC는 가능한 경우 기본 문자와 부호를 미리 결합된 문자로 만들고, NFD는 결합된 문자를 분해합니다. 둘 다 결합 부호를 정규 순서로 정렬합니다.

하지만 Zalgo 제거기는 아닙니다. 극단적인 조합 대부분에는 미리 결합된 문자가 없으므로 정규화 뒤에도 부호가 남습니다.

‘일반 텍스트’ 기능을 만들려면 어떤 부호가 언어이고 어떤 부호가 장식인지 따로 판단해야 합니다. 모든 결합 부호를 지우면 베트남어, 아랍어, 히브리어와 인도계 문자를 비롯한 정상 언어가 훼손됩니다.

한 글자처럼 보여도 코드 포인트는 많다

유니코드 분할 규칙은 기본 문자와 뒤따르는 부호를 하나의 확장 자소 클러스터로 묶습니다. 가 두 코드 포인트여도 커서는 한 단위로 이동할 수 있습니다.

Zalgo는 같은 원리를 극단으로 밀어붙입니다. 한 글자처럼 보이는 단위가 열 개, 스무 개가 넘는 코드 포인트를 포함해 데이터베이스 길이 제한, 알림 잘림, 커서 이동, 줄 높이, 검색과 스크린 리더에 영향을 줍니다.

사용자가 보는 길이와 컴퓨터가 저장하는 길이는 다릅니다.

정상적인 기반 위에 만든 장식

결합 부호는 ‘나쁜 문자’가 아니라 디지털 언어에 꼭 필요한 기반입니다. 이 효과는 유니코드와 현대 문자 조형 시스템이 복잡한 문자를 지원하기 때문에 가능합니다.

위험은 양과 맥락에서 생깁니다. 큰 더미는 화면을 읽기 어렵게 하고 자동 시스템만 처리하는 차이를 숨길 수 있습니다. 보이지 않는 문자, 동형 문자와 재배열이 언어 처리 시스템을 혼란시킬 수 있다는 연구도 있습니다.

화면을 망가뜨리지 않고 쓰기

  • 짧은 제목이나 한 단어에만 사용하세요.
  • 낮거나 중간 강도를 고르세요.
  • 실제 사용할 앱에서 확인하세요.
  • 내용이 중요하면 일반 버전을 함께 쓰세요.
  • 계정명, 링크, 이메일과 안전 정보에는 쓰지 마세요.

Zalgo는 쌓아서 만드는 타이포그래피입니다. 기본 글자는 평범하지만 실제 유니코드 부호가 비범한 형태를 만듭니다.

글리치 문자 생성기에서 부호 양을 조절하고 위 현미경으로 결과를 확인하세요.

출처와 더 읽을거리

  1. 기술 표준
  2. 기술 표준
  3. 기술 표준
  4. 학술 논문
    Bad Characters: Imperceptible NLP Attacks

    Nicholas Boucher, Ilia Shumailov, Ross Anderson, and Nicolas Papernot 2022 IEEE Symposium on Security and Privacy 2022 DOI 10.1109/SP46214.2022.9833641

댓글

댓글을 불러오는 중…