如何将std :: string转换为NSString?看看最后一张图片

时间:2014-11-18 02:23:40

标签: ios objective-c++

如何将std :: string转换为NSString? ,为什么结果出现乱码?我使用lldb命令po,查看控制台,红色箭头,_data显示正确的字符串?为什么?

 std::string resultString = getResult();
 NSString *str= [NSString stringWithCString:resultString.c_str() encoding:NSUTF8StringEncoding];

但str是乱码,如enter image description here

enter image description here

why str's value = nil

enter image description here

enter image description here

1 个答案:

答案 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);
}

日志的参考图片:

enter image description here

在这里,您可以看到NSUTF8StringEncoding返回nil字符串,其他编码会给出结果。我不确定哪种编码方案对你的字符串有效。如果我们知道resultString字符串的编码方案,那么我们可以在这里获得更准确的结果。