我想将C ++字符串转换为NSString
以在iOS应用中使用。
但有时候对于带有奇怪后缀格式的C ++字符串,结果为nil。
例如:一个C ++字符串“但事实上它原来是你!$ \ _ 211 /”在转换为NSString
后会生成nil。
mainFile.open(filePath, std::ios::binary);
mainFile.seekg(current_offset);
char buffer[size];
mainFile.read(buffer, sizeof buffer);
string tempString = string(buffer)
NSString *testString = [NSString stringWithCString:tempString.c_str() encoding:NSUTF8StringEncoding];
当cout << tempString
我仍然使用奇怪的代码后缀读取字符串内容时,但在转换为NSString
后生成nil
任何人都知道如何解决这个问题?
答案 0 :(得分:1)
为什么要干扰C ++部分呢?
NSString *filePath = @"/path/to/some/file.txt";
NSFileHandle *input = [NSFileHandle fileHandleForReadingAtPath:filePath];
[input seekToOffset:current_offset];
NSData *bytes = [input readDataOfLength:size];
if (bytes)
{
NSString *str = [[NSString alloc] initWithData:bytes encoding:NSUTF8StringEncoding];
}
else
{
NSLog(@"Unable to read from file");
}
如果str
为nil
,则表示数据未编码为UTF8,因此您需要查找数据实际所在的编码。如果来自Windows计算机,请尝试NSWindowsCP1251StringEncoding
或NSISOLatin1StringEncoding
。
答案 1 :(得分:0)
代码指定编码NSUTF8StringEncoding
,但字符串的字节值不是有效的UTF-8字符。选择与字符串匹配的编码。
尝试使用NSISOLatin1StringEncoding
如果您来自Mac环境,8位ISO Latin 1编码。
NSMacOSRomanStringEncoding
可能是另一种要考虑的编码。