공백 문자인지 확인하는 일이 얼마나 어려울까?

1 day ago 6

공백 판별은 단순한 c == ' ' 비교로 끝나지 않으며, Unicode의 25개 공백 문자와 런타임별 판정 기준을 구분해야 함 Java, Python, JavaScript는 같은 문자도 다르게 판정함. 줄바꿈 없는 공백, 제어 문자, 너비 없는 문자 등의 포함 여부가 서로 다름 Unicode의 공백 정의도 변함. Unicode 6.3에서 MONGOLIAN VOWEL SEPARATOR가 제외되면서 공백 집합이 26개에서 25개로 줄었고, 이런 변경은 하위 호환성을 중시하는 라이브러리에 부담이 됨 Guava는 완전 해시 함수(perfect hash function) 로 공백 문자를 32칸 테이블에 배치하고, 곱셈과 비트 시프트, 문자 비교로 포함 여부를 검사함 Guava의 구현은 단순한 판별기에서 나눗셈을 사용하는 방식을 거쳐 완전 해싱으로 발전했으며, 작은 함수의 내부를 살펴보는 것만으로도 Unicode와 최적화 기법을 함께 탐구할 수 있음 공백은 반드시 빈칸처럼 보이지 않음 Google의 Java 라이브러리 Guava의 공백 판별 함수는 단순한 스페이스 비교보다 복잡하며, 그 출발점은 무엇을 공백으로 볼 것인가임 Unicode의 White_Space 속성은 25개 문자를 포함함 익숙한 예로 SPACE (U+0020), NO-BREAK SPACE (U+00A0), CHARACTER TABULATION (U+0009), LINE FEED (U+000A)가 있음 FIGURE SPACE (U+2007)는 표의 숫자 한 자리와 같은 너비를 가지며, THIN SPACE (U+2009)와 HAIR SPACE (U+200A)는 차례로 더 좁은 간격을 만듦 NO-BREAK SPACE는 일반 스페이스와 같은 너비지만, 줄을 바꿀 때 양쪽 텍스트가 함께 유지되도록 함 이름이나 모양만으로 공백 속성을 판단할 수는 없음 ZERO WIDTH SPACE (U+200B)는 이름과 달리 공백 문자가 아니라 서식 문자이며, 눈에 보이는 간격 없이 단어나 줄을 나눌 수 있는 위치를 나타냄 OGHAM SPACE MARK (U+1680)는 공백 문자이지만, 중심선이 있는 Ogham 글꼴에서는 글자 사이를 잇는 수평선으로 보일 수 있음. 중심선이 없는 글꼴에서는 빈칸으로 나타남 Java, Python, JavaScript의 서로 다른 기준 Java의 Character.isWhitespace(char)는 Unicode 속성이 아니라 Java의 공백 ...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵