2014-10-04 1 views
1

У меня есть коды emoji (например, коды Unicode Hex), такие как U0001f618. Я хочу иметь возможность вводить код и возвращать эможи. До сих пор это работает:Objective-C читает шестнадцатеричный код и выводит Emoji

NSLog (@"\U0001f618"); 

Это возвращает смайлики, однако если хранить код в файл и импортировать его в NSString и позвонить;

NSLog (unicodeForEmoji); 

Код возвращается i.e .: \ U0001f618, любые идеи?

Благодаря

D

+0

Вы должны сканировать текст и заменить соответствующие управляющие последовательности с эквивалентным характером. – rmaddy

+0

как это сделать? – dgee4

+0

В дополнение к другим проблемам, поймите, что NSLog часто не отображает символы, отличные от ASCII, правильно. –

ответ

4

байты являются юникода кодирование: NSUTF32BigEndianStringEncoding.

Для чтения непосредственно из использования файла:

NSString *unicodeString = [[NSString alloc] initWithContentsOfFile:path encoding:NSUTF32BigEndianStringEncoding error:&error]; 

Тест:

// The next two lines substiture to reading the data from the file: 
unsigned char unicode32Chars[4] = { 0x00, 0x01, 0xf6, 0x18 }; 
NSData *unicode32Data = [NSData dataWithBytes:unicode32Chars length:4]; 
NSLog (@"unicode32Data: '%@'", unicode32Data); 

NSString *unicode32String = [[NSString alloc] initWithData:unicode32Data encoding:NSUTF32BigEndianStringEncoding]; 
NSLog (@"unicode32String: '%@'", unicode32String); 

Выход:

unicodeData: '<0001f618>' 
unicodeString: '' 

Я подозреваю, что вы, возможно, действительно хотите использовать кодировку UTF-8, но это другая строка байтов:

unsigned char unicode8Chars[4] = { 0xf0, 0x9f, 0x98, 0x98 }; 
NSData *unicode8Data = [NSData dataWithBytes:unicode8Chars length:4]; 
NSLog (@"unicode8Data: '%@'", unicode8Data); 

NSString *unicode8String = [[NSString alloc] initWithData:unicode8Data encoding:NSUTF8StringEncoding]; 
NSLog (@"unicode8String: '%@'", unicode8String); 

Выход:

unicode8Data: '<f09f9898>' 
unicode8String: '' 

 Смежные вопросы

  • Нет связанных вопросов^_^