我们的代码调用了 stringWithUTF8String
但我们的一些数据在字符串中使用了 octal
序列\340。这会导致一些代码中断,因为我们从未期望该函数返回 nil
。我做了一些研究,发现\200-\777 中的任何八进制序列都会给出相同的结果。我知道我可以处理这个返回的 nil
但我想了解为什么它会返回 nil
,以及这些八进制转义被解释为什么。
NSString *result = [NSString stringWithUTF8String:"Mfile \340 xyz.jpg"];
运行此代码返回 nil
结果。似乎为了防御性编码,我们将不得不在我们使用它的任何地方检查 null 结果,这似乎很不幸。该函数的文档没有说明任何关于返回 nil 的可能性。我敢打赌,那里有很多代码也不会检查它。
最佳答案
UTF-8 Character Table
没有 \340
的条目。为此,您需要使用 ASCII
编码。做,
NSString * result = [NSString stringWithCString:"Mfile \340 xyz.jpg" encoding:NSASCIIStringEncoding];
NSLog(@"%@", result);
关于iphone - iOS 某些八进制转义序列导致 stringWithUTF8String 为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6368228/