如何将 NSString 转换为 UTF-8 以外的编码?

How do I convert NSString to an encoding other than UTF-8?

我正在 iOS 项目中使用 c 我正在尝试将我的字符串转换为 c 中受尊重的类型,下面的代码应该发送到核心库

typedef uint16_t    UniCharT;
static const UniCharT s_learnWord[] = {'H', 'e','l','[=10=]'};

到目前为止我所做的是 string 是我正在传递的

NSString * string = @"Hel";
static const UniCharT *a = (UniCharT *)[string UTF8String];

但是当超过一个字符时转换失败,如果我传递一个字符然后工作正常请告诉我我错过的地方,我怎么能像s_learnWord ?

我试过 googleWhosebug none 的重复项或答案对我来说不起作用 Convert NSString into char array 我已经在用同样的方法了。

你的问题有点模棱两可,正如标题所说 "c type char[]" 但你的代码使用 typedef uint16_t UniCharT; 这是矛盾的。

对于 UTF-8 以外的任何字符串转换,您通常需要使用方法 getCString:maxLength:encoding:

当您使用 uint16_t 时,您可能正在尝试使用 UTF-16?在这种情况下,您需要将 NSUTF16StringEncoding 作为编码常量传递。 (或者可能 NSUTF16BigEndianStringEncoding/NSUTF16LittleEndianStringEncoding

像这样的东西应该可以工作:

include <stdlib.h>

// ...

NSString * string = @"part";
NSUInteger stringBytes = [string maximumLengthOfBytesUsingEncoding];
stringBytes += sizeof(UniCharT); // make space for [=10=] termination
UniCharT* convertedString = calloc(1, stringBytes);
[string getCString:(char*)convertedString
         maxLength:stringBytes
          encoding:NSUTF16StringEncoding];

// now use convertedString, pass it to library etc.

free(convertedString);