我知道在SQLite中更改stringWithCString
时如何处理此问题...而只是stringWithUTF8String
。当char *
返回sysctlbyname
时,它是否相同? (见下面的代码)
- (NSString *) platform{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithCString:machine];
free(machine);
return platform;
}
提前致谢!
答案 0 :(得分:20)
如果您使用的C字符串是UTF-8编码的,请使用stringWithUTF8String:
。如果是纯ASCII,则使用编码为stringWithCString:encoding:
的{{1}}。否则,它可能使用Latin-1编码,在这种情况下,您应使用编码为NSASCIIStringEncoding
的{{1}}。
在这种情况下,stringWithCString:encoding:
几乎肯定会给你一个ASCII字符串,所以你应该这样做:
NSISOLatin1StringEncoding
虽然使用其他两种方法中的任何一种都不会造成伤害。
答案 1 :(得分:2)
您只需指定字符串编码,在sysctlbyname:
的情况下为ASCIINSString *platform = [NSString stringWithCString:machine encoding:NSASCIIStringEncoding];
答案 2 :(得分:1)
stringWithCString:不推荐使用stringWithCString:encoding:。您可以使用[NSString defaultCStringEncoding]来准确再现stringWithCString的行为:但您可能最好指定NSASCIIStringEncoding或NSUTF8StringEncoding。 sysctlbyname返回的编码似乎是隐式的,因此7位ASCII是一个安全的选择,使得任一编码都适合。
答案 3 :(得分:1)
如果您在
中发现错误errorString = [NSString stringWithCString:iax_errstr];
试试这个
errorString = [NSString stringWithCString:iax_errstr encoding:NSASCIIStringEncoding]