您好我有一个问题,我不知道如何解决。问题是我甚至不知道如何谷歌。我已经花了几个小时在互联网上寻找解决方案,但没有成功。情况是这样的:
我有字符串,让我们说:
NSString *string = @"aąbcčdeęėfghiįjzž";
我的结果必须是这样的:
NSString *string = @"aabccdeeefghiujzz";
所以如果你明白我必须这样做:
用
替换±用c
替换č用e
替换ė用e
替换ę依旧......
也许有人可以帮助我?我有一个答案,但它没有得到很好的优化,我希望有一些更方便的解决方案。
提前致谢!
答案 0 :(得分:11)
让框架为您进行转换:
NSString *blah = @"aąbcčdeęėfghiįjzž";
NSData *data = [blah dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newblah = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"new: %@", newblah);
此日志:
new: aabccdeeefghiijzz
答案 1 :(得分:5)
这将有效:
NSString *str = @"aąbcčdeęėfghiįjzž";
NSLog(@"%@", str);
NSMutableString *s = [[str decomposedStringWithCompatibilityMapping] mutableCopy];
NSUInteger pos = 0;
while(pos < s.length) {
NSRange r = [s rangeOfComposedCharacterSequenceAtIndex:pos];
if (r.location == NSNotFound) break;
pos = ++r.location;
if (r.length == 1) continue;
r.length--;
[s deleteCharactersInRange:r];
}
NSLog(@"%@", s);
这个想法是首先用变音符号将每个字符分解为其基本字符的序列和Unicode combining diacritical marks的序列(由decomposedStringWithCompatibilityMapping
完成),然后遍历字符串,并删除所有字符这样的标记一个接一个(这就是循环所做的)。
答案 2 :(得分:0)
我只能提供这个:
[string stringByReplacingOccurrencesOfString:@"ą" withString:@"a"];
依旧......
答案 3 :(得分:0)
Dave DeLong的回答将用“ae”代替“æ”,用“s”代替“ß”,但不会取代连字œ,ij,ff,fi,fl,ffi,ffl,ft,st,..
改进的解决方案是添加三行映射来处理所有问题:
blah = [blah stringByReplacingOccurrencesOfString:@"Œ" withString:@"OE"];
blah = [blah stringByReplacingOccurrencesOfString:@"œ" withString:@"oe"];
blah = [blah precomposedStringWithCompatibilityMapping];
NSData *data = [blah dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *newblah = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];