2010-01-23 69 views
13

我想知道哪种方法更适合将const char *字符串转换为NSString。
我发现有一些事实。将const char *字符串转换为带有长度和编码的NSString

  • [NSString stringWithCString:length:]是一种不推荐的。
  • [NSString的stringWithCString:编码]可用于我的目的

但我想,长度和编码(转换,因为我想通过设置编码,以使这很好,如果我有一些非ASCII字符。 UTF-8)。有什么想法吗?

我只是觉得现在

  1. 创建其他char和使用的std :: strncpy()函数(CH1,CH2,LEN)
  2. 使用长度为复制[NSString的stringWithCString:编码:]

但它不能很好地工作。

回答

16

用途:

[NSString initWithBytes:length:encoding]. 
33

如果你为const char *变量命名为foo(和它指向一个空终止字符串),只说

[NSString stringWithUTF8String:foo] 

因为UTF-8是一个超集的ASCII,无论foo指向UTF-8还是ASCII,这都会起作用。然后你可以移动到完整的Unicode,没有任何问题。

+4

这只适用于你的字符串是ASCII的,但。如果你的字符串是其他的东西(比如MacRoman或者ISO拉丁文),你最多可以为特定的字符显示错误的字形,最坏的情况是你会得到一个NIL字符串,因为你碰巧生成了一个无效的字节序列,没有映射到有效的UTF8字符(是的,这是可能的,UTF8编码的方式超过256个不同的字符,所以有多字节序列可以对字符进行编码,其中一些字符是无效的(尚未)) – uliwitness 2010-02-14 23:56:17

+0

非常有用谢谢 – vgonisanz 2012-09-18 07:46:33