如何从UITextField中取出非英文字符并将其视为普通字符

时间:2014-05-13 21:34:34

标签: ios objective-c unicode uitextfield

我有一个包含非英语单词的数据库(对于那些想要土耳其语字母的人)。我有一个算法,可以将输入与数据库进行比较。

所以我的问题是这个;在我的数据库中,所有字符串都用土耳其字符编写。所以,假设我有比较heyyö的元素。当用户输入heyyo时,它将无法找到它,因为它们被视为不同的单词。

我的第一个想法是特殊情况,并且当发现非英语字符时考虑是英语还是非英语字母(例如g与ğ或我与ı)但这意味着很多暴力。

我怎样才能做到优雅。

哦,用户从文本字段输入此输入,如果没有暗示的话。

2 个答案:

答案 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解决了这个问题。