IT/PROGRAMMING

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

하마연구소장 2019. 2. 6. 11:29
728x90
반응형

요즘 대부분 인코딩 환경은 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]의 의미는 정확히 모른다. 그냥 쓰면된다. (의미 아시는분은 comment 달아주시면 감사하겠습니다.)

반응형