본문 바로가기

프로그램/iPhone

NSData가 UTF8로 인코딩 되어 있지 않아 NSString에서 한글을 볼 수 없을 때.

서버 등에서 받은 NSData가 NSUTF8StringEncoding나 NSASCIIStringEncoding 인코딩으로 NSString을 생성해도 한글이 제대로 보이지 않을 때는 0×80000840 으로 인코딩 하면 된다.

1 NSString* aString = [[[NSString alloc] initWithData:receivedData encoding:0x80000422] autorelease];

아래 표가 NSString.h에서 정의하고 있는 encoding인데

01 enum {
02 NSASCIIStringEncoding = 1,        /* 0..127 only */
03 NSNEXTSTEPStringEncoding = 2,
04 NSJapaneseEUCStringEncoding = 3,
05 NSUTF8StringEncoding = 4,
06 NSISOLatin1StringEncoding = 5,
07 NSSymbolStringEncoding = 6,
08 NSNonLossyASCIIStringEncoding = 7,
09 NSShiftJISStringEncoding = 8,          /* kCFStringEncodingDOSJapanese */
10 NSISOLatin2StringEncoding = 9,
11 NSUnicodeStringEncoding = 10,
12 NSWindowsCP1251StringEncoding = 11,    /* Cyrillic; same as AdobeStandardCyrillic */
13 NSWindowsCP1252StringEncoding = 12,    /* WinLatin1 */
14 NSWindowsCP1253StringEncoding = 13,    /* Greek */
15 NSWindowsCP1254StringEncoding = 14,    /* Turkish */
16 NSWindowsCP1250StringEncoding = 15,    /* WinLatin2 */
17 NSISO2022JPStringEncoding = 21,        /* ISO 2022 Japanese encoding for e-mail */
18 NSMacOSRomanStringEncoding = 30,
19  
20 NSUTF16StringEncoding = NSUnicodeStringEncoding,      /* An alias for NSUnicodeStringEncoding */
21  
22 #if MAC_OS_X_VERSION_10_4 <= MAC_OS_X_VERSION_MAX_ALLOWED || __IPHONE_2_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED
23 NSUTF16BigEndianStringEncoding = 0x90000100,          /* NSUTF16StringEncoding encoding with explicit endianness specified */
24 NSUTF16LittleEndianStringEncoding = 0x94000100,       /* NSUTF16StringEncoding encoding with explicit endianness specified */
25  
26 NSUTF32StringEncoding = 0x8c000100,
27 NSUTF32BigEndianStringEncoding = 0x98000100,          /* NSUTF32StringEncoding encoding with explicit endianness specified */
28 NSUTF32LittleEndianStringEncoding = 0x9c000100        /* NSUTF32StringEncoding encoding with explicit endianness specified */
29 #endif
30 };

한글은 아래 표에 나와있다.

* NSString *

Western (Mac OS Roman) 0x1e
Japanese (Mac OS) 0×80000001
Traditional Chinese (Mac OS) 0×80000002
Korean (Mac OS) 0×80000003
Arabic (Mac OS) 0×80000004
Hebrew (Mac OS) 0×80000005
Greek (Mac OS) 0×80000006
Cyrillic (Mac OS) 0×80000007
Devanagari (Mac OS) 0×80000009
Gurmukhi (Mac OS) 0x8000000a
Gujarati (Mac OS) 0x8000000b
Thai (Mac OS) 0×80000015
Simplified Chinese (Mac OS) 0×80000019
Tibetan (Mac OS) 0x8000001a
Central European (Mac OS) 0x8000001d
Symbol (Mac OS) 0×6
Dingbats (Mac OS) 0×80000022
Turkish (Mac OS) 0×80000023
Croatian (Mac OS) 0×80000024
Icelandic (Mac OS) 0×80000025
Romanian (Mac OS) 0×80000026
Keyboard Symbols (Mac OS) 0×80000029
Farsi (Mac OS) 0x8000008c
Cyrillic (Mac OS Ukrainian) 0×80000098
Western (Mac VT100) 0x800000fc
Unicode™ (UTF-16) 0xa
Unicode™ (UTF-8) 0×4
Western (ISO Latin 1) 0×5
Central European (ISO Latin 2) 0×9
Western (ISO Latin 3) 0×80000203
Central European (ISO Latin 4) 0×80000204
Cyrillic (ISO 8859-5) 0×80000205
Arabic (ISO 8859-6) 0×80000206
Greek (ISO 8859-7) 0×80000207
Hebrew (ISO 8859-8) 0×80000208
Turkish (ISO Latin 5) 0×80000209
Nordic (ISO Latin 6) 0x8000020a
Thai (ISO 8859-11) 0x8000020b
Baltic Rim (ISO Latin 7) 0x8000020d
Celtic (ISO Latin 8) 0x8000020e
Western (ISO Latin 9) 0x8000020f
Latin-US (DOS) 0×80000400
Greek (DOS) 0×80000405
Baltic Rim (DOS) 0×80000406
Western (DOS Latin 1) 0×80000410
Central European (DOS Latin 2) 0×80000412
Turkish (DOS) 0×80000414
Icelandic (DOS) 0×80000416
Arabic (DOS) 0×80000419
Cyrillic (DOS) 0x8000041b
Thai (Windows, DOS) 0x8000041d
Japanese (Windows, DOS) 0×8
Simplified Chinese (Windows, DOS) 0×80000421
Korean (Windows, DOS) 0×80000422
Traditional Chinese (Windows, DOS) 0×80000423
Western (Windows Latin 1) 0xc
Central European (Windows Latin 2) 0xf
Cyrillic (Windows) 0xb
Greek (Windows) 0xd
Turkish (Windows Latin 5) 0xe
Hebrew (Windows) 0×80000505
Arabic (Windows) 0×80000506
Baltic Rim (Windows) 0×80000507
Vietnamese (Windows) 0×80000508
Western (ASCII) 0×1
Japanese (Shift JIS X0213) 0×80000628
Chinese (GBK) 0×80000631
Chinese (GB 18030) 0×80000632
Japanese (ISO 2022-JP) 0×15
Korean (ISO 2022-KR) 0×80000840
Japanese (EUC) 0×3
Simplified Chinese (EUC) 0×80000930
Traditional Chinese (EUC) 0×80000931
Korean (EUC) 0×80000940
Japanese (Shift JIS) 0x80000a01
Cyrillic (KOI8-R) 0x80000a02
Traditional Chinese (Big 5) 0x80000a03
Western (Mac Mail) 0x80000a04
Traditional Chinese (Big 5 HKSCS) 0x80000a06
Western (NextStep) 0×2
Non-lossy ASCII 0×7
Western (EBCDIC US) 0x80000c02

Ref: NSString의 인코딩

출처 : http://alones.kr/1959?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+alones/lCfe+(Alones+world)