Ruby의 문자열은 Byte열로 구현되어있어서, 루비 문자열 객체의 메소드는 기본적으로 바이트 단위로 처리한다.
한국어와 같은 Multi-byte 문자를 처리할때 예상치 못한 결과가 발생할 수 있다.
"디자인"과 같은 한글 문자열은 3글자로 구성되어있지만, 바이트 단위로는 9 바이트를 차지한다.
따라서, 바이트 기반 메소드인 "length"을 사용하면, 3 대신에 9를 리턴한다.
이때 chars라는 Proxy메소드를 사용하여, 유니코드 기반의 메소드를 지원하고 있다.
다음은 그 예이다.
>> puts "디자인" 디자인 >> "디자인".length ==> 9 >> "디자인".chars.length ==> 3 |