我想重新整理一个包含希腊字符的字符串:
这是我的代码:
- (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字符。
同样,一旦您有任何无法在指定编码中使用的字符,从
NSString
到NSData
的转换也将失败。下面的方法避免了所有这些问题,并应使用任意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/