将带有长度和编码的const char*字符串转换为NSString

18
我想知道将const char*字符串转换为NSString的哪种方法更好。
我发现有一些事实。
  • [NSString stringWithCString:length:]有点过时。
  • [NSString stringWithCString:encoding]可以用于我的目的。

但我想要用长度和编码(因为我想通过将编码设置为UTF-8来处理一些非ASCII字符)进行转换。有什么想法吗?

我现在只是这样想

  1. 使用std::strncpy(ch1, ch2, len)创建其他的char并复制长度
  2. 使用[NSString stringWithCString:encoding:]

但它效果不好。

2个回答

45
如果你的 const char* 变量名为 foo(并且它指向一个以 null 结尾的字符串),只需这样说:
[NSString stringWithUTF8String:foo]

由于UTF-8是ASCII的超集,因此无论foo指向UTF-8还是ASCII,都可以使用这种方法。然后您可以毫不费力地切换到完整的Unicode。


4
如果你的字符串是 ASCII 编码,那么这个方法才有效。如果你的字符串采用其他编码方式(例如 MacRoman 或 ISO Latin),则最好情况下会显示错误的字符图形,最坏情况下,你将得到一个 NIL 字符串,因为你生成了一组无效的字节序列,无法映射到有效的 UTF8 字符(是的,这是可能的)。UTF8 编码远比 256 种不同的字符多,因此存在一些多字节序列来编码一个字符,并且其中一些序列不是有效的(还没有定义)。 - uliwitness

17

使用:

[NSString initWithBytes:length:encoding].

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接