Ios 如何从UITExtfield中提取非英语字符并将其视为正常字符

Ios 如何从UITExtfield中提取非英语字符并将其视为正常字符,ios,objective-c,unicode,uitextfield,Ios,Objective C,Unicode,Uitextfield,我有一个包含非英语单词的数据库(为那些想知道土耳其语字母的人)。我有一个算法,可以将输入与数据库进行比较 所以我的问题是,;在我的数据库中,所有字符串都是用土耳其语字符编写的。假设我有thıs元素来比较heyyö。当用户输入heyyo时,将找不到它,因为它们被视为不同的单词 我的第一个想法是提出特殊的情况,当一个非英语字符发现是否英语或非英语字母(如G与I或I与),但这意味着很多蛮力。< /P> 我怎样才能优雅地做到这一点 哦,如果不是隐含的,用户从文本字段输入此输入。删除变音符号称为“折叠”。

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

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

我的第一个想法是提出特殊的情况,当一个非英语字符发现是否英语或非英语字母(如G与I或I与),但这意味着很多蛮力。< /P> 我怎样才能优雅地做到这一点


哦,如果不是隐含的,用户从文本字段输入此输入。

删除变音符号称为“折叠”。您可以使用选项
NSDiacriticInsensitiveSearch
比较字符串,而不考虑变音符号

[string compare:otherString options:NSDiacriticInsensitiveSearch] == NSOrderedSame
类似地,您可以使用
stringByFoldingWithOptions:locale:
生成折叠字符串


请注意,这只会删除变音符号。有很多种方式可以让角色“看起来”相同,而不是相同。土耳其语在这方面有点臭名昭著,因为“I”的小写版本是“ı”(拉丁小圆点I),而不是“I”。如果你特别与土耳其语打交道,你可能必须对此做出解释。

你可以这样做:

NSString *input = @"heyyö";
NSData *intermediaryDataForm = [input dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *output = [[NSString alloc] initWithData:intermediaryDataForm encoding:NSASCIIStringEncoding];

这样,因为土耳其语字母不是ASCII的一部分,并且您允许有损转换,所以在转换为NSData表单时,它会自动将“ö”更改为“o”。然后将其转换回NSString解决了这个问题。

我特别关注土耳其语。我将输入存储到NSMutablearray,并在经过大量中间过程后比较基于字符串的比较。是否有其他方法可以使用这种“折叠概念”,比如我从数组中取出每个元素并将其“折叠”,然后重新添加到arrayYes,这就是
stringByFoldingWithOptions:locale:
可以为您做的。它还可以将大写字母转换为小写字母(但同样,在土耳其语中,这会让您使用dotless-i,而不是dotter-i,所以请记住。)土耳其语dotter-i问题非常普遍,它出现在
stringByFoldingWithOptions:locale:
docs中。(顺便说一句,我说这些话的时候,你好像不熟悉土耳其语,并不想粗鲁地暗示这一点,但我写这封信是为了那些以后可能也会阅读,可能不懂字母表的人。我只是通过解决你目前遇到的各种问题来理解。)嘿,刚刚运行了一个小测试,将这个“ğşıiüö”转换成这个“gsıiuo”非常有用。所以当我对输入和数据库数组使用相同的方法时,我会得到我想要的完美。Thnx可以如此快速地解决我的问题。