본문 바로가기

IT & 개발/etc

😲 “((” 이게 다르다고? — 괄호의 숨겨진 정체

반응형

어느 날, ((와 같은 괄호가 텍스트 치환이 안 되는 이상한 상황을 마주했습니다. 분명 코드에서는 "("를 잘 인식하고 있었는데, 현실에서는 작동하지 않더군요. 왜 그럴까요?


✅ 괄호도 다를 수 있다?

우리가 흔히 쓰는 괄호 (와 )는 키보드에서 쉽게 입력할 수 있습니다. 그런데 문제는 문서나 입력기, 환경에 따라 비슷해 보이지만 완전히 다른 문자로 인식될 수 있다는 데 있습니다.

예를 들어 아래 두 괄호를 보세요:

  • ( (반각 괄호, ASCII)
  • ( (전각 괄호, Full-width)

🔍 실제로 확인해보자: 유니코드 비교

괄호의 정체를 확인하는 가장 확실한 방법은 유니코드 코드포인트를 살펴보는 것입니다.

문자 이름 유니코드

( 반각 소괄호 (half-width) U+0028
전각 소괄호 (full-width) U+FF08

👀 겉보기엔 같아 보여도, 완전히 다른 문자입니다!


🧩 실제 문제가 발생하는 예시

HWP나 HWPX 파일에서 괄호를 포함한 문장을 파싱할 때, 혹은 자바스크립트에서 특정 문자열을 replace()로 치환할 때 다음과 같은 일이 생길 수 있습니다:

item.text.replace(/\(\)/g, '[아이콘]');

이 정규식은 ()만 인식하지, ( ) 전각 괄호는 무시하게 됩니다. 이럴 땐 다음처럼 확장된 정규식을 써야 하죠:

item.text.replace(/[\(\(]\s*[\)\)]/g, '[아이콘]');

📁 왜 이런 일이 생기나?

  • 문서 작성 환경이 다르면 입력되는 문자의 종류도 달라집니다.
  • HWP 같은 워드프로세서는 내부적으로 전각 문자나 사용자 정의 폰트를 적용할 수 있습니다.
  • HWPX는 XML 기반이라 유니코드가 명시되지만, 여전히 다양한 문자 유형이 혼재할 수 있습니다.

✅ 개발자/에디터 팁

  • 문자가 안 바뀔 땐 "혹시 다른 괄호인가?" 의심해보기!
  • 문자열 정규화 (NFKC 등) 사용 고려하기
  • VSCode의 "Unicode Highlight" 확장이나, 파이썬/JS에서 charCodeAt() / ord() 함수로 유니코드 확인

앞으로 (( 같은 괄호가 치환되지 않는다면, 그것이 정말 우리가 생각하는 "("가 맞는지부터 의심해보는 게 좋겠습니다. 겉모습은 같아도 본질은 다를 수 있으니까요.

 

반응형