/ / Конвертиране на UTF8 шестнадесетичен низ в обикновен UTF8 кодиран NSString - iphone, ios, aim-c, utf-8, nsstring

Конвертиране на UTF8 Hex низ в обикновени кодирани с UTF8 NSString - iphone, ios, objective-c, utf-8, nsstring

Получавам utf-8 (шестнадесетичен): Hc3b8rt обратно от сървър вместо низа "Hørt". Трябва да конвертирам този отговор в редовен utf-8.

Това, което съм опитал:

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

const char *cfilename=[string UTF8String];

NSString *str = [NSString stringWithUTF8String:cfilename];

Благодаря за вашето време!

Отговори:

1 за отговор № 1

Няма как да декодирате това. Както @JoachimIsaksson заяви в коментарите по-горе, как можете да разберете дали "abba" е точно "abba" или два символа unicode?


1 за отговор № 2

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

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

Или накратко,

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

Редактиране след коментари:

Това е нещо странно. Направих няколко експеримента след вашите коментари и открих някакво странно поведение.

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

Този резултат: hår

Но ако получите U в капитал, а не u, тогава ги замених с u. И тогава не се получи. Изглежда,

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

Изходът е, hu00c3u00a5r


0 за отговор № 3

Използвайте по-долу код ..

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

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

NSLog(@"%@",yourstring);

уведомете ме дали работи или не ...

Честито кодиране ....


0 за отговор № 4

използвайте този код

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

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

NSString *str = [NSString stringWithUTF8String:cfilename];

и кажете дали работи или не.