Iphone NSString-如何从“开始”Á;“代数”;至;“代数”;

Iphone NSString-如何从“开始”Á;“代数”;至;“代数”;,iphone,nsstring,compare,Iphone,Nsstring,Compare,有没有人知道如何把像“ÁlgeBra”这样的字符串改为“Algebra”,而不带重音,只大写第一个字母 谢谢 RL这里有一个如何做的分步示例。有改进的余地,但你得到了基本的想法 NSString *input = @"ÁlgeBra"; NSString *correctCase = [NSString stringWithFormat:@"%@%@", [[input substringToIndex:1] uppercaseString]

有没有人知道如何把像“ÁlgeBra”这样的字符串改为“Algebra”,而不带重音,只大写第一个字母

谢谢


RL

这里有一个如何做的分步示例。有改进的余地,但你得到了基本的想法

NSString *input = @"ÁlgeBra";
NSString *correctCase = [NSString stringWithFormat:@"%@%@",
                           [[input substringToIndex:1] uppercaseString],
                           [[input substringFromIndex:1] lowercaseString]];

NSString *result = [[[NSString alloc] initWithData:[correctCase dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES] encoding:NSASCIIStringEncoding] autorelease];

NSLog( @"%@", result );

NSString
有一个名为:

返回值 一种字符串,其中接收者中每个单词的第一个字符更改为其相应的大写值,其余所有字符设置为其相应的小写值

编辑: 刚才看到你想删除口音以及。您可以执行一系列步骤:

// original string
NSString *str = @"ÁlgeBra";

// convert to a data object, using a lossy conversion to ASCII
NSData *asciiEncoded = [str dataUsingEncoding:NSASCIIStringEncoding
                         allowLossyConversion:YES];

// take the data object and recreate a string using the lossy conversion
NSString *other = [[NSString alloc] initWithData:asciiEncoded
                                        encoding:NSASCIIStringEncoding];
// relinquish ownership
[other autorelease];

// create final capitalized string
NSString *final = [other capitalizedString];
的文档明确指出,当转换为ASCII时,字母“Á”将转换为“A”。

。但是,我认为使用
stringByFoldingWithOptions:locale:
方法比使用
stringByFoldingWithOptions:locale:
方法更优雅,而不是在
NSData
之间进行有损转换来删除重音字符

NSString *accentedString = @"ÁlgeBra";
NSString *unaccentedString = [accentedString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];
NSString *capitalizedString = [unaccentedString capitalizedString];

根据要转换的字符串的性质,您可能希望设置固定的区域设置(例如英语),而不是使用用户的当前区域设置。这样,您就可以确保在每台机器上得到相同的结果。

这是正确的答案。不要做dreamlax建议的愚蠢的NSData NSString业务。allowLossyConversion技术确实处理了一些我无法用NSLocale处理的场景。对于exmaple,如果我有以下字符串:ßÄÆñ。当我运行StringByFolding时,我得到的选项是:ßAÆun。当我运行allowLossyConversion时,我得到:sAAEun。就我而言,我想要第二种选择。有没有一种方法可以用更少的黑客手段得到类似的答案?@Alex:这不是黑客手段,苹果公司建议在他们的文档中使用
allowLossyConversion
方法将一个省略号字符转换为三个ASCII句点@美国司法部不恰当地将这项技术命名为错误,但事实上这是一种合法的方法。如果将日语、阿拉伯语、汉语等字符传递到allowLossyConversion技术中,会发生什么?您当然不想将它们转换为ASCII字符串。@TapForms:这取决于所需的结果。不要这样做。这是错误的——请看下面奥勒·贝格曼的回答。当我尝试这样做时,我得到的是一个“?”字符,而不是预期的“OE”。我正在iOS 6上测试这个。有人在这项技术上运气好吗?@TapForms:在苹果公司提交一个bug。它与Æ一起工作,所以没有理由不与Œ一起工作。@dreamlax是的,它一定是个bug。我刚刚用以下字符串测试了您的代码:@“ŒÆß”,这是我得到的结果:“?aes”。运行经验是错误的。我可能只需要为OE添加一个特例并提交一个bug。这种方法非常适合我转换城市名称进行搜索。格但斯克到格但斯克,科尔多瓦到科尔多瓦
NSString *accentedString = @"ÁlgeBra";
NSString *unaccentedString = [accentedString stringByFoldingWithOptions:NSDiacriticInsensitiveSearch locale:[NSLocale currentLocale]];
NSString *capitalizedString = [unaccentedString capitalizedString];