如何从整数中创建unicode字符?

时间:2009-07-22 06:28:23

标签: objective-c cocoa string unicode nsstring

我想创建一个Unicode字符数组,但我不知道如何将整数转换为Unicode表示形式。这是我到目前为止的代码

NSMutableArray *uniArray = [[NSMutableArray alloc] initWithCapacity:0];
int i;

for (i = 32; i < 300; i++) {
    NSString *uniString = [NSString stringWithFormat:@"\u%04X", i];
    [uniArray addObject:uniString];
}

这给了我一个错误“不完整的通用字符名称\ u”

有没有更好的方法来构建Unicode符号数组?感谢。

4 个答案:

答案 0 :(得分:7)

您应该使用%C插入一个unicode字符:

NSMutableArray *uniArray = [[NSMutableArray alloc] initWithCapacity:0];
int i;

for (i = 32; i < 300; i++) {
   NSString *uniString = [NSString stringWithFormat:@"%C", i];
   [uniArray addObject:uniString];
}

另一种(更好的?)方式是使用stringWithCharacters:

NSMutableArray *uniArray = [[NSMutableArray alloc] initWithCapacity:0];
int i;

for (i = 32; i < 300; i++) {
   NSString *uniString = [NSString stringWithCharacters:(unichar *)&i length:1];
   [uniArray addObject:uniString];
}

答案 1 :(得分:2)

错误的原因是\u必须在编译时跟随四个十六进制数字 。您已经使用“%04x”跟着它,显然是为了在运行时插入这四个十六进制数字 ,这太晚了 - 编译器早就完成了它的工作,编译器正在给你这个错误。

答案 2 :(得分:1)

如果您想要一个UTF-16字符[NSString stringWithCharacters:&character length:1]。如果它是UTF-32,你必须转换为代理对,或者使用-initWithData:encoding:,或尝试菲利普所说的(我不确定是否正确处理UTF-32,但它应该)。 / p>

答案 3 :(得分:0)

正则表达式使用的另一个令人震惊的例子:

需要RegexKitLite。使用正则表达式(?s).将一串unicode字符拆分为NSArray。默认情况下,.正则表达式运算符匹配所有换行符,序列(?s)表示Turn on the Dot All regex option允许.匹配新的字符线条角色也是如此。很重要,因为我们显然在下面的示例中至少传递了\n

#import <Foundation/Foundation.h>
#import "RegexKitLite.h"

// Compile with: gcc -std=gnu99 -o unicodeArray unicodeArray.m RegexKitLite.m -framework Foundation -licucore

int main(int argc, char *argv[]) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

  unichar uc[1024];
  for(NSUInteger idx = 0UL; idx < 1024UL; idx++) { uc[idx] = (unichar)idx; }
  NSArray *unicharArray = [[NSString stringWithCharacters:uc length:1024UL] componentsMatchedByRegex:@"(?s)."];

  NSLog(@"array: %@", [unicharArray subarrayWithRange:NSMakeRange(32UL, (1024UL - 32UL))]);

  [pool release];
  return(0);
}