如何将 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 ?
我试过 google
和 Whosebug
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);
我正在 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 ?
我试过 google
和 Whosebug
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);