[Objective-C] UTF-8 환경에서 한글의 길이를 2바이트로 얻는 방법

안녕하세요, 하마연구소 입니다.

요즘 대부분 인코딩 환경은 UTF-8을 사용하고 있습니다.
특히 MacOS나 iOS 환경은 99.9% UTF-8을 사용한다고 봐도됩니다.
얼마전까지만해도 컴퓨터를 좀 다뤄본 사람은 한글 1글자의 길이는 2바이트라고 생각할 것입니다.
하지만 UTF-8 환경에서는 한글 1글자는 메모리상에서 3바이트를 사용합니다. (참고: http://ko.wikipedia.org/wiki/UTF-8)

Objective-C를 비롯하여 Java, C#, PHP 등등 대부분의 언어는 한글 1글자가 2바이트이던 3바이트이던 상관하지 않고 프로그래밍합니다.
왜냐? 메모리가 부족한 것도 아니고, 비트 또는 바이트 단위로 세부적으로 처리하는 일도 거의 없고, 머리 아프게 코딩하기도 싫고, 기타 등등…
심지어는 메모리를 직접 건드리면서 코딩하는 C/C++에서도 동일한 인코딩 방식만 사용하면 이런 머리아픈 코딩하지 않습니다.
필자도 그렇습니다.
여러 인코딩 방식을 사용하는 전사시스템이 아닌이상 본인이 만든 프로그램이 실행되는 환경이 UTF-8인지 EUC-KR인지 고민하지 않고 코딩하고 있죠.
하지만, 딱 1가지 한글이 무조건 2바이트로 처리되어지길 바라는 경우가 있습니다.

바로 출력!!!
더 정확하게 얘기하면 pretty-printing.
즉, 한글과 영어, 숫자가 칸을 맞춰서 아름답게 출력되길 바랄경우가 있습니다.

NSString *str = @"This is a 한글 문자열";int len1 = [str length];int len2 = [str lengthOfBytesUsingEncoding:0x80000000 + kCFStringEncodingDOSKorean];

위 코드는 UTF-8 환경에서 실행하면, 변수 len1에는 16, 변수 len2에는 21 값이 설정되는 것을 확인할 수 있습니다.

lengthOfBytesUsingEncoding: task에서 0x80000000 + kCFStringEncodingDOSKorean[/cpde]의 의미는 정확히 모르겠습니다.
그냥 쓰면됩니다.
의미 아시는분은 답글 달아주세요.

감사합니다.

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다