2011-09-21 49 views

回答

2

我有其中包含与NSUTF8Encoding编码数据一个NSString。

真的吗? 因为NSString在内部始终将其内容视为UTF-16。因为您无法确定NSString如何在内部存储其数据。从概念上讲,NSString使用UTF-16。

我想将该字符串转换为NSASCIIStringEncoding。因为你不能保证一个NSString可以转换为ASCII

if ([myString canBeConvertedToEncoding:NSASCIIStringEncoding]) { 
    const char *asciiString = [myString cStringUsingEncoding:NSASCIIStringEncoding]; 
} 
+2

+1的测试是非常重要的。 – JeremyP

+0

我的印象是,NSString的内部表示根据类簇想要如何优化它而变化。 Apple在哪里说它总是UTF-16? – LucasTizma

+1

Lucas:参见http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Strings/Articles/stringsClusters.html:“NSString对象在概念上是UTF-16,平台排列顺序不一定。暗示着它们内部存储机制的任何内容;它的含义是NSString的长度,字符索引和范围用UTF-16单位来表示,而NSString方法名称中的“字符”这个术语是指16位平台的endian UTF-16单元“。 - 所以你至少部分是正确的。在概念上它是UTF-16,但没有定义实际的存储。 –

相关问题