将字符串转换为NSString时出现问题

时间:2015-09-17 02:05:16

标签: ios objective-c nsstring objective-c++

我想将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

任何人都知道如何解决这个问题?

2 个答案:

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

如果strnil,则表示数据未编码为UTF8,因此您需要查找数据实际所在的编码。如果来自Windows计算机,请尝试NSWindowsCP1251StringEncodingNSISOLatin1StringEncoding

答案 1 :(得分:0)

代码指定编码NSUTF8StringEncoding,但字符串的字节值不是有效的UTF-8字符。选择与字符串匹配的编码。

尝试使用NSISOLatin1StringEncoding

等编码
  

8位ISO Latin 1编码。

如果您来自Mac环境,

NSMacOSRomanStringEncoding可能是另一种要考虑的编码。