我想重新整理一个包含希腊字符的字符串:

这是我的代码:

- (void)shuffle {
    NSLog(@"Will shuffle :%@",anagram2);

    NSData* data = [anagram2 dataUsingEncoding:NSWindowsCP1253StringEncoding];
    NSLog(@"after encoding :%@",anagram2);

    NSString *someString = [[NSString alloc]initWithData:data encoding:NSWindowsCP1253StringEncoding];
    NSLog(@"Greek word:%@",someString);

    int length = anagram2.length;
    NSMutableArray *letters = [[NSMutableArray alloc] init];

    for (int i = 0; i< length; i++) {
        NSString *letter = [NSString stringWithFormat:@"%c", [someString characterAtIndex:i]];
        NSLog(@"Character:%@",letter);

        [letters addObject:someLetter];
    }
    for (int i = 0; i<length; i++) {
      int value = arc4random() % (length-1);
      //NSLog(@"Value is : %i", value);
      [letters exchangeObjectAtIndex:i withObjectAtIndex:value];
    }
}


我可以正确看到希腊字。但是改组不起作用。如何提取每个字符并将其添加到字母数组。它适用于英语单词,但不适用于希腊单词,因此我想应该替换为:

NSString *letter = [NSString stringWithFormat:@"%c", [someString characterAtIndex:i]];


还有其他的东西。

最佳答案

在我看来主要的问题是

[NSString stringWithFormat:@"%c":...]


仅适用于ASCII字符。您至少必须使用"%C"格式
它适用于Unicode字符。

同样,一旦您有任何无法在指定编码中使用的字符,从NSStringNSData的转换也将失败。

下面的方法避免了所有这些问题,并应使用任意Unicode字符
(即使使用表情符号,表情符号在内部也表示为2个UTF-16字符):

NSString *string = @"Ελλάδα 😄";
NSLog(@"Will shuffle: %@", string);

// Convert string to an array of (32 bit) Unicode characters:
NSMutableData *data = [[string dataUsingEncoding:NSUTF32BigEndianStringEncoding] mutableCopy];
uint32_t *letters = [data mutableBytes];
int length = [data length]/4; // The number of 32-bit Unicode characters

// Shuffle the Unicode characters:
for (int i = 0; i<length; i++) {
    int value = arc4random() % (length-1);
    uint32_t tmp = letters[i];
    letters[i] = letters[value];
    letters[value] = tmp;
}

// Create new string from the shuffled Unicode characters:
NSString *shuffled = [[NSString alloc] initWithData:data encoding:NSUTF32BigEndianStringEncoding];
NSLog(@"Shuffled:     %@", shuffled);


输出:

会随机播放:Ελλάδα😄
随机播放:α😄άλλΕδ

关于ios - 在iOS中改组希腊字会打印未知符号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17454664/

10-11 16:49