【问题标题】:How do I convert NSString to an encoding other than UTF-8?如何将 NSString 转换为 UTF-8 以外的编码?
【发布时间】:2020-02-17 13:04:41
【问题描述】:

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

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

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

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

但是当超过一个字符时它无法转换,如果我通过一个字符然后工作正常请让我错过我的地方,我怎样才能通过s_learnWord ?

我在googleStackOverFLow 中尝试过,没有一个重复项或答案对我不起作用 Convert NSString into char array我已经在做同样的事情了。

【问题讨论】:

  • 我不这么认为,我正在做同样的转换,无论如何我更新了我的问题,谢谢
  • UTF8String 返回const char *UniCharT 是什么?
  • 即typedef uint16_t
  • 还有一件事是我必须通过const UniCharT* insertString; 这是在库中声明的所以我必须通过insertString

标签: ios objective-c char nsstring


【解决方案1】:

你的问题有点含糊,因为标题是“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 \0 termination
UniCharT* convertedString = calloc(1, stringBytes);
[string getCString:(char*)convertedString
         maxLength:stringBytes
          encoding:NSUTF16StringEncoding];

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

free(convertedString);

【讨论】:

  • cStringUsingEncoding:
  • @Cy-4AH The documentation for cStringUsingEncoding: 声明“特殊注意事项 UTF-16 和 UTF-32 不被视为 C 字符串编码,不应与此方法一起使用— 传递 NSUTF16StringEncoding、NSUTF32StringEncoding 或它们的任何变体的结果是未定义的。”所以不,不要在这里使用cStringUsingEncoding:
  • 我的意思是好的static const UniCharT s_learnWord[] = {'H', 'e','l','\0'}; 如果我通过了它工作正常,你能建议我如何从NSString 转换为s_learnWord
  • @PraveenKumar 我给出了一个可以帮助您入门的示例。
  • @pmdj 谢谢你是对的我需要转换UTF16String,现在工作正常
猜你喜欢
  • 2011-01-28
  • 1970-01-01
  • 2012-06-30
  • 2011-06-26
  • 2014-02-02
  • 2012-06-12
  • 2012-01-15
  • 2013-09-12
  • 1970-01-01
相关资源
最近更新 更多