stringWithUTF8String:做什么以及如何工作

时间:2013-12-20 09:25:33

标签: objective-c c arrays methods utf-8

我是Objective-C的新手,在这里我遇到了stringWithUTF8String类方法。 所以,我在苹果开发者库中搜索方法,然后我来到了这句话

  

返回通过从给定的UTF8编码字节的C数组复制数据而创建的字符串。

在阅读之后,我对句子的说法一无所知。

我觉得阅读苹果开发者库很难理解。 有人可以提供一些方法应用的简单代码示例。

4 个答案:

答案 0 :(得分:4)

它只是从utf8编码的(http://en.wikipedia.org/wiki/UTF8)c字符串(char *)创建一个Cocoa NSString。

const char* cstr = "I am a c string";
NSString* str = [NSString stringWithUTF8String:cstr];

答案 1 :(得分:2)

NSString *s = [NSString stringWithUTF8String:"Long dash symbol \xe2\x80\x94"];
NSLog(@"%@",s);

UTF8编码的字符串被视为C字节数组,因此要将它们转换为字符串,您可以使用此方法。

答案 2 :(得分:2)

所以听起来你遇到了NSString支持的丰富性和复杂性。这是一个深刻的主题。

所有字符串实际上都存储为某种数组,并具有将数组元素值映射到字符的编码。

NSString在大多数时候都很好地隐藏了这种复杂性,因为它很难学习并且很难手动完成,很少有人能够做到。在大多数情况下不必考虑它并做其他事情也更有趣。

但是,NSString在内部保留了一系列Unichars。当您从另一个不是NSString的外部源的字符串创建字符串时,您需要知道编码。否则垃圾在垃圾里出来。

UTF8恰好非常强大,对字节顺序等不敏感,因此它在Web和XML中得到了广泛采用。 它并非适用于所有情况,因此平台本机框架倾向于使用UTF16或32进行某些优化。

您可能会说这是文件的编码。 (可怕的概括)和UTF16和32及其字节顺序问题是硬件特定处理能力的编码。 (另一个不好的概括)

维基百科在Unicode编码和特别是UTF8上有很好的参赛作品。

这是开始冒险的好地方。

答案 3 :(得分:1)

文档很清楚。您可以从C类型创建Objective C对象,即您可以将C数组转换为NSString(Objective C对象)。你可以用它和例如With和NSData这样的对象:

NSDAta *data = ....

NSString *myString = [NSString stringWithUTF8String:[data bytes]];