Iphone 将UTF8十六进制字符串转换为常规UTF8编码的NSString

Iphone 将UTF8十六进制字符串转换为常规UTF8编码的NSString,iphone,ios,objective-c,utf-8,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]; 谢谢你抽出时间 使用字符串编码,NSISOLatin

我正在从服务器返回UTF-8(十六进制):Hc3b8rt,而不是字符串“Hørt”。 我需要将此响应转换为常规UTF-8

我所尝试的:

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

const char *cfilename=[string UTF8String];

NSString *str = [NSString stringWithUTF8String:cfilename];

谢谢你抽出时间

使用字符串编码,
NSISOLatin1StringEncoding

 - (id)initWithCString:(const char *)nullTerminatedCString 
              encoding:(NSStringEncoding)encoding
或者很快

NSString *str = [NSString stringWithCString:cfilename 
                                   encoding:NSISOLatin1StringEncoding];
评论后编辑:

这有点奇怪。在你的评论之后,我做了一些实验,发现了一些奇怪的行为

- (void) testStringEncodingOK {
    NSString *string = @"h\u00c3\u00a5r";
    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 = @"h\u00c3\u00a5r"
    const char *cfilename=[string cStringUsingEncoding:NSISOLatin1StringEncoding];
    NSString *cs = [NSString stringWithUTF8String:cfilename];
    NSLog(@"String: %@", cs);
}
输出为,h\u00c3\u00a5r

使用以下代码

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

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

   NSLog(@"%@",yourstring);
让我知道它是否有效


快乐的编码…

你无法解码这个。正如@JoachimIsaksson在上面的评论中所说的,您如何判断“abba”到底是“abba”还是两个unicode字符

使用此代码

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

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

NSString *str = [NSString stringWithUTF8String:cfilename];

然后告诉它是否工作。

如果这是你真正得到的,你如何判断
abba
是一个流行组还是两个十六进制字符?你从服务器收到的字符串是“Hc3b8rt”或“H\xC3\xB8rt”?检查这个答案。。。我工作还是不工作!!!!嗯。您的服务器正在发送Hc3b8rt而不是“H\xC3\xB8rt”,这有点复杂。我想服务器应该发送编码字符串。它实际上也发送h\U00c3\U00a5r。应该是“hår”。