2 min read

Clojure로 유니코드 한글 출력하기

Clojure로 유니코드 한글 출력하기
Photo by insung yoon / Unsplash

유니코드 (또는 UTF-8)로 구성된 한글 테이블이 필요해져서, 이왕에 clojure 연습 겸
한글 유니코드를 출력하는 코드를 작성해보았다.
유니코드 테이블에서의 한글의 범위는 \uAC00부터 \uD7A3 까지 11,172자로, 유니코드 한글코드표에서 확인할 수 있다.

코드는 제일 처음 값부터 시작해서 끝까지 리스트로 출력하는 것으로 작성하면 될 것이다.
대충 다음과 같이 작성하면 쉽게 되지 않을까?

(range \uac00 \ud7a3)

아쉽게도 다음과 같이 에러를 뱉는다. 숫자가 아니라고 한다.

ClassCastException java.lang.Character cannot be cast to java.lang.Number  clojure.lang.Numbers.lt (Numbers.java:219)

그래서 좀더 찾아본 후 다음과 같이 수정했다.

(map char (range 0xac00 0xd7a3))

잘 동작한다! 다음과 같이 첫 값과 마지막 값을 확인할 수 있다.

user=> (first (map char (range 0xac00 0xd7a3)))
\가
user=> (last (map char (range 0xac00 0xd7a3)))
\힢

가만, '힢'? 원래 한글 유니코드의 마지막은 '힣'이다. 위 링크의 정보가 잘못된 건가? 이모저모 확인해보니 range에 넣은 값이 문제였다. 원하는 끝 값보다 하나 더 큰 값으로 넣어야 한다.
(range 0 5)의 결과는 (0 1 2 3 4)이다.

user=> (last (map char (range 0xac00 0xd7a4)))
\힣

원하는 결과가 나왔다.

— END OF POST.