使用长度AND编码将const char*string转换为NSString

tks*_*shi 15 c++ cocoa encoding objective-c++

我想知道哪种方法更好地将const char*string转换为NSString.
我发现有一些事实.

  • [NSString stringWithCString:length:]有点不推荐使用.
  • [NSString stringWithCString:encoding]可能用于我的目的

但我想用长度和编码进行转换(因为如果我通过将编码设置为UTF-8而有一些非ASCII字符,我想要那么好).有什么想法吗?

我现在才想

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

但它效果不好.

Jon*_*eid 39

如果你的const char*变量被命名foo(并且它指向一个以null结尾的字符串),那么就说

[NSString stringWithUTF8String:foo]
Run Code Online (Sandbox Code Playgroud)

因为UTF-8是ASCII的超集,所以无论是foo指向UTF-8还是ASCII都可以.然后,您可以毫无问题地升级到完整的Unicode.

  • 这只适用于您的字符串是ASCII的情况.如果你的字符串是其他任何东西(例如MacRoman或ISO Latin),你最多会为特定字符显示错误的字形,最坏的情况下你会得到一个NIL字符串,因为你碰巧生成了一个无效的字节序列映射到有效的UTF8字符(是的,这是可能的.UTF8编码方式超过256个不同的字符,因此存在编码字符的多字节序列,其中一些无效(尚未). (4认同)

Die*_*Epp 16

使用:

[NSString initWithBytes:length:encoding].
Run Code Online (Sandbox Code Playgroud)