OS/IOS
UTF-8 String
Lohen
2016. 2. 5. 00:16
UTF8String은 CString으로 가능한 옵션중 매우 특정한 것을 리턴하는 거죠. 개념적으로 볼때...
CString이라는 것은 어차피 정의를 따라가보면 바이트배열+널 터미네이터이고 이걸 해석해서 사람이 볼 문자로 바꾸는 것이 텍스트 인코딩이라 할 수 있을텐데, UTF8String은 해당 바이트 배열+널 터미네이터의 인코딩이 UTF-8으로 된 CString을 리턴하는 거죠. UTF-8은 이런저런 이유로 자주 쓰이는 텍스트 인코딩이므로 별도로 선언해서 조금이라도 코딩을 줄여주게 해 놓은 배려라고 볼 수 있죠. 실제로 선언부 코드의 주석을 보시면, 편의를 위한 것으로 되어 있지요...Convenience to return null-terminated UTF8 representation
UTF-8로 인코딩 된 바이트배열+널 터미네이터 쓰시겠다면 UTF8String으로 쓰는 것이 혼란(과 코딩의 양)이 줄어들테고...
다른 인코딩을 써야 되거나 하는 경우는 CString (+encoding)을 써야겠죠...
물론 CString 어쩌구 시리즈에도 인코딩을 수동으로 NSUTF8Encoding인가 그걸로 지정하면 UTF8String하고 똑같은 짓을 할 수 있는데, 이게 귀찮아서 생긴 거라 보시면 될 듯 합니다.
c는 문자열에 대한 배려가 없고, 단순히 바이트 배열로 표현하는데, 그냥 두면 한도 끝도 없으니, 배열의 끝을 나타내기 위한 널('\0')을 만날때까지...라고 해 놓고 이를 문자열의 데이터 구조로 씁니다.
c의 문자열에 대한 부분을 알아보시기를...
바이트 배열은 사실 0~255까지의 숫자들을 쭉 나열해 놓은 것이죠. 그래서 숫자->문자로 바꾸기 위해 문자를 표에서 찾아서(이때 이용되는 인덱스 번호가 문자 코드. 예를 들면 65는 a 이런거...) 문자열을 표현하는 것이구요.
옛날에는 영어만 있으면 되겠지(?)해서 아스키 코드표로 써서 7, 8비트정도로 표현했는데, 알고보니 세상에 영어만 있는 것이 아니라서...UTF-8같은 복잡한(?) 바이트 배열의 숫자를 문자 코드로 바꾸는 공식(방식)들이 고안되어 나온것이고 이처럼 숫자->문자 코드로 바꾸는 공식들이 바로 텍스트 인코딩이죠.
인코딩은 여럿 존재하므로, 같은 문자열이라도 바이트 배열에 들어간 숫자는 다를 수 있구요.
출처: 맥부기, 타이가장관님 덧글 http://cafe.naver.com/mcbugi/115151