我从服务器返回UTF-8(十六进制):Hc3b8rt而不是字符串“Hørt”。 我需要将此响应转换为常规UTF-8。
我尝试过:
NSString *string = [dict objectForKey:@"suggest"];
const char *cfilename=[string UTF8String];
NSString *str = [NSString stringWithUTF8String:cfilename];
感谢您的时间!
答案 0 :(得分:1)
使用字符串编码,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 \ u00c5 \ u00a5r
答案 1 :(得分:1)
你无法解码这个。正如@JoachimIsaksson在上面的评论中所说,你如何判断“abba”究竟是“abba”还是两个unicode字符?
答案 2 :(得分:0)
使用以下代码..
const char *ch = [yourstring cStringUsingEncoding:NSISOLatin1StringEncoding];
yourstring = [[NSString alloc]initWithCString:ch encoding:NSUTF8StringEncoding];
NSLog(@"%@",yourstring);
让我知道它的工作与否......
快乐编码......
答案 3 :(得分:0)
使用此代码
NSString *string = [dict objectForKey:@"suggest"];
const char *cfilename=[string stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSString *str = [NSString stringWithUTF8String:cfilename];
告诉它是否有效。