5

我想制作一个 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

4 回答 4

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];
}
于 2009-07-22T06:35:54.017 回答
2

错误的原因是在编译时\u必须后跟四个十六进制数字。你在后面加上“<code>%04x”,显然是为了在运行时插入这四个十六进制数字,这已经太晚了——编译器早就完成了它的工作,编译器就是给你这个错误。

于 2009-07-22T14:43:30.297 回答
1

如果你想要一个 UTF-16 字符,[NSString stringWithCharacters:&character length:1]. 如果它是 UTF-32,则必须转换为代理对,或使用-initWithData:encoding:,或尝试 Philippe 所说的(我不确定该句柄是否正确使用 UTF-32,但应该如此)。

于 2009-07-22T07:10:04.913 回答
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);
}
于 2009-07-24T05:36:33.537 回答