iphone - iOS 某些八进制转义序列导致 stringWithUTF8String 为 nil

标签 iphone ios unicode

我们的代码调用了 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/

相关文章:

ios - 运行 xcode 应用程序时找不到设备消息

iphone - 为对象分配内存时出现内存泄漏问题

iphone - 在 UIAlertView 中调用 NSString?

ios - 防止我自己的应用程序的共享扩展出现在共享表中

Haskell unicode 模式匹配

sql-server - 在 SQL Server 中将包含阿拉伯字符的 Unicode 字符串转换为 ASCII

iphone - UITextView 获取选定的文本点

iphone - 方向更改时的 ModalViewController 尺寸

iphone - MFMailComposeViewController 中缺少 TabView

java - 如何使用带重音符号的阿拉伯字母在文本文件中书写? java