我试图将带有丹麦字符的字符串分隔到NSMutableArray中。但有些东西不起作用。 :(
我的代码:
NSString *danishString = @"æøå";
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[danishString length]];
for (int i=0; i < [danishString length]; i++)
{
NSString *ichar = [NSString stringWithFormat:@"%c", [danishString characterAtIndex:i ]];
[characters addObject:ichar];
}
如果我在NSLog上使用danishString它可以工作(返回æøå);
但是如果我对字符(数组)执行NSLog,我会得到一些非常危险的字符 - 出了什么问题?
/的Morten
答案 0 :(得分:2)
首先,您的代码不正确。 characterAtIndex
返回unichar
,因此您应使用@"%C"
(大写)作为格式说明符。
即使使用正确的格式说明符,您的代码也是不安全的,严格来说,仍然不正确,因为并非所有unicode字符都可以由单个unichar
表示。您应该始终处理每个子字符串的unicode字符串:
将字符串视为一系列字符是很常见的,但是什么时候 使用NSString对象,或者通常使用Unicode字符串 在大多数情况下,最好处理子串而不是 个性人物。这个的原因是用户是什么 在许多情况下,作为文本中的字符可以被表示为 字符串中的多个字符。
你一定要阅读String Programming Guide。
最后,为您准确的代码:
NSString *danishString = @"æøå";
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[danishString length]];
[danishString enumerateSubstringsInRange:NSMakeRange(0, danishString.length) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
[characters addObject:substring];
}];
如果使用NSLog(@"%@", characters);
,您会看到“\ Uxxxx”形式的“奇怪字符”,这是正确的。这是NSArray
方法description
的默认字符串化行为。如果要查看“普通字符”,可以逐个打印这些unicode字符:
for (NSString *c in characters) {
NSLog(@"%@", c);
}
答案 1 :(得分:0)
在您的示例中,ichar
不是NSString
的类型,而是unichar
。如果您希望NSString
尝试获取子字符串:
NSString *danishString = @"æøå";
NSMutableArray *characters = [[NSMutableArray alloc] initWithCapacity:[danishString length]];
for (int i=0; i < [danishString length]; i++)
{
NSRange r = NSMakeRange(i, 1);
NSString *ichar = [danishString substringWithRange:r];
[characters addObject:ichar];
}
答案 2 :(得分:0)
您可以执行以下操作,对于丹麦语字符应该可以使用,但如果您已经分解了字符,则可以分解。我建议您阅读String Programming Guide以获取更多信息。
NSString *danishString = @"æøå";
NSMutableArray* characters = [NSMutableArray array];
for( int i = 0; i < [danishString length]; i++ ) {
NSString* subchar = [danishString substringWithRange:NSMakeRange(i, 1)];
if( subchar ) [characters addObject:subchar];
}
这会将字符串拆分为单个字符数组,假设所有代码点都是由字符组成的。
答案 3 :(得分:-1)
正在打印角色的unicode。无论如何,你可以在任何地方使用unicode(和\ u)。