我想创建一个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符号数组?感谢。
答案 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);
}