반응형
어느 날, ((와 같은 괄호가 텍스트 치환이 안 되는 이상한 상황을 마주했습니다. 분명 코드에서는 "("를 잘 인식하고 있었는데, 현실에서는 작동하지 않더군요. 왜 그럴까요?
✅ 괄호도 다를 수 있다?
우리가 흔히 쓰는 괄호 (와 )는 키보드에서 쉽게 입력할 수 있습니다. 그런데 문제는 문서나 입력기, 환경에 따라 비슷해 보이지만 완전히 다른 문자로 인식될 수 있다는 데 있습니다.
예를 들어 아래 두 괄호를 보세요:
- ( (반각 괄호, 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() 함수로 유니코드 확인
앞으로 (( 같은 괄호가 치환되지 않는다면, 그것이 정말 우리가 생각하는 "("가 맞는지부터 의심해보는 게 좋겠습니다. 겉모습은 같아도 본질은 다를 수 있으니까요.
반응형
'IT & 개발 > etc' 카테고리의 다른 글
Git Checkout 충돌 해결: 유실을 감수하는 방법 vs 안전한 방법 (0) | 2025.05.12 |
---|---|
🚫 Nginx 413 Request Entity Too Large 오류 해결 방법 (0) | 2025.05.12 |
MySQL에서 특수문자(①~⑩) 검색 및 제거하는 방법 (버전별 정리) (0) | 2025.04.04 |
Git에서 'Permission denied' 오류 해결 방법 (0) | 2025.02.19 |
윈도우에서 하위 폴더 파일 일괄 이름 변경하는 방법 (1) | 2025.01.29 |