2013-05-27 3 views
0

Я получаю UTF-8 (hex): Hc3b8rt обратно с сервера вместо строки «Hørt». Мне нужно преобразовать этот ответ в обычный UTF-8.Преобразование UTF8 Шестнадцатеричная строка в обычную кодировку UTF8 NSString

То, что я пробовал:

NSString *string = [dict objectForKey:@"suggest"]; 

const char *cfilename=[string UTF8String]; 

NSString *str = [NSString stringWithUTF8String:cfilename]; 

Спасибо за ваше время!

+0

Если вы действительно вернетесь, как бы вы сказали, была ли 'abba' поп-группой или двумя шестнадцатеричными символами? –

+0

Строка, которую вы получаете с сервера: «Hc3b8rt» или «H \ xC3 \ xB8rt»? – ale0xB

+0

@ ale0xB Первый! –

ответ

1

использование строки кодирования, NSISOLatin1StringEncoding

- (id)initWithCString:(const char *)nullTerminatedCString 
       encoding:(NSStringEncoding)encoding 

Или коротко,

NSString *str = [NSString stringWithCString:cfilename 
            encoding:NSISOLatin1StringEncoding]; 

Edit после комментариев:

Это какое-то странное. Я сделал несколько экспериментов после ваших комментариев и нашел какое-то странное поведение.

- (void) testStringEncodingOK { 
    NSString *string = @"h\u00c3\u00a5r"; 
    const char *cfilename=[string cStringUsingEncoding:NSISOLatin1StringEncoding]; 
    NSString *cs = [NSString stringWithUTF8String:cfilename]; 
    NSLog(@"String: %@", cs); 
} 

Этот выход: HAR

Но если вы получаете \ U в столице, а не \ и, то я заменил их \ и. И тогда это не сработало. Кажись в,

- (void) testStringEncodingConfused { 
    NSString *string = @"h\\U00c3\\U00a5r"; 
    string = [string stringByReplacingOccurrencesOfString:@"\\U" withString:@"\\u"]; 
NSLog(@"Original string:%@", string); // now string = @"h\u00c3\u00a5r" 
    const char *cfilename=[string cStringUsingEncoding:NSISOLatin1StringEncoding]; 
    NSString *cs = [NSString stringWithUTF8String:cfilename]; 
    NSLog(@"String: %@", cs); 
} 

Выходной сигнал есть, ч \ u00c3 \ u00a5r

+0

Это тоже не сработало. Тот же результат. –

+0

hmmm. вы отправляете сервер Hc3b8rt не «H \ xC3 \ xB8rt», то его немного сложнее. Думаю, сервер должен отправить закодированную строку. – karim

+0

Он действительно отправляет h \ U00c3 \ U00a5r. Должно быть «hår». –

0

Используйте ниже код ..

const char *ch = [yourstring cStringUsingEncoding:NSISOLatin1StringEncoding]; 

 yourstring = [[NSString alloc]initWithCString:ch encoding:NSUTF8StringEncoding]; 

    NSLog(@"%@",yourstring); 

дайте мне знать, что она работает или нет ...

Happy Coding ....

+0

Это не сработало. Тот же результат. –

+0

проверить этот ответ ... http: //stackoverflow.com/questions/6421282/how-to-convert-hex-to-nsstring-in-objective-c....tell me working or not !!!! – NiravPatel

1

Невозможно декодировать это. Как пояснил @JoachimIsaksson в комментариях выше, как вы можете сказать, является ли «abba» точно «abba» или двумя символами unicode?

+0

Да, это имеет смысл .. –

0

использовать этот код

NSString *string = [dict objectForKey:@"suggest"]; 

const char *cfilename=[string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 

NSString *str = [NSString stringWithUTF8String:cfilename]; 

и сказать, если он работает или нет.

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