如何将std :: string转换为NSString? ,为什么结果出现乱码?我使用lldb命令po
,查看控制台,红色箭头,_data
显示正确的字符串?为什么?
std::string resultString = getResult();
NSString *str= [NSString stringWithCString:resultString.c_str() encoding:NSUTF8StringEncoding];
但str是乱码,如
答案 0 :(得分:1)
可能这里的问题是字符串编码。我对这个输入字符串做了很少的测试,并发现了一些结果。
这里我使用了您在日志中显示的复杂字符串"\x18\xa4\tp\x01"
。从结果我得出结论,NSUTF8StringEncoding
编码字符串不能与上面的字符串一起使用。
这是代码:
+ (void) stringTest {
std::string *resultString = new std::string("\x18\xa4\tp\x01");
NSString *str= [NSString stringWithCString:resultString->c_str() encoding:NSUTF8StringEncoding];
NSString *str2= [NSString stringWithCString:resultString->c_str() encoding:NSASCIIStringEncoding];
NSString *str3= [NSString stringWithCString:resultString->c_str() encoding:[NSString defaultCStringEncoding]];
NSLog(@"str :%@",str);
NSLog(@"str2 :%@",str2);
NSLog(@"str3 :%@",str3);
}
日志的参考图片:
在这里,您可以看到NSUTF8StringEncoding
返回nil
字符串,其他编码会给出结果。我不确定哪种编码方案对你的字符串有效。如果我们知道resultString
字符串的编码方案,那么我们可以在这里获得更准确的结果。