我有一个包含非英语单词的数据库(对于那些想要土耳其语字母的人)。我有一个算法,可以将输入与数据库进行比较。
所以我的问题是这个;在我的数据库中,所有字符串都用土耳其字符编写。所以,假设我有比较heyyö
的元素。当用户输入heyyo
时,它将无法找到它,因为它们被视为不同的单词。
我的第一个想法是特殊情况,并且当发现非英语字符时考虑是英语还是非英语字母(例如g与ğ或我与ı)但这意味着很多暴力。
我怎样才能做到优雅。
哦,用户从文本字段输入此输入,如果没有暗示的话。
答案 0 :(得分:3)
删除变音符号称为“折叠”。您可以使用选项NSDiacriticInsensitiveSearch
来比较字符串而不考虑变音符号。
[string compare:otherString options:NSDiacriticInsensitiveSearch] == NSOrderedSame
您可以使用stringByFoldingWithOptions:locale:
类似地生成折叠字符串。
请注意,这只会删除变音符号。角色可以通过很多方式“看起来”相同而不相同。土耳其语有点臭名昭着,因为“I”的小写版本是“ı”(LATIN SMALL DOTLESS I),而不是“i”。如果您特别处理土耳其语,您可能需要考虑到这一点。
答案 1 :(得分:0)
你可以做的是这样的事情:
NSString *input = @"heyyö";
NSData *intermediaryDataForm = [input dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *output = [[NSString alloc] initWithData:intermediaryDataForm encoding:NSASCIIStringEncoding];
这样,因为土耳其字母不是ASCII的一部分,并且您允许有损转换,所以当转换为NSData表单时,它会自动将'ö'更改为'o'。然后将其转换回NSString解决了这个问题。