본문 바로가기

.Tip

[Ruby] 유니코드 확장

Ruby의 문자열은 Byte열로 구현되어있어서, 루비 문자열 객체의 메소드는 기본적으로 바이트 단위로 처리한다.

한국어와 같은 Multi-byte 문자를 처리할때 예상치 못한 결과가 발생할 수 있다.

 

"디자인"과 같은 한글 문자열은 3글자로 구성되어있지만, 바이트 단위로는 9 바이트를 차지한다.

따라서, 바이트 기반 메소드인 "length"을 사용하면, 3 대신에 9를 리턴한다.

 

이때 chars라는 Proxy메소드를 사용하여, 유니코드 기반의 메소드를 지원하고 있다.

 

다음은 그 예이다.

>> puts "디자인"
디자인

>> "디자인".length
==> 9

>> "디자인".chars.length
==> 3