将ë,à,é,ä等特殊字符转换为e,a,e,a?目标C.

时间:2011-03-07 08:55:02

标签: objective-c sdk character

目标c中是否有一种简单的方法可以将所有特殊字符(如ë,à,é,ä)转换为普通字符,如e en a?

2 个答案:

答案 0 :(得分:25)

是的,这很简单:

NSString *src = @"Convert special characters like ë,à,é,ä all to e,a,e,a? Objective C";
NSData *temp = [src dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *dst = [[[NSString alloc] initWithData:temp encoding:NSASCIIStringEncoding] autorelease];
NSLog(@"converted: %@", dst);

在我的机器上运行它会产生:

EmptyFoundation[69299:a0f] converted: Convert special characters like e,a,e,a all to e,a,e,a? Objective C

基本上,我们要求字符串将自身转换为NSData(即字节数组),表示ASCII字符集中字符串中的字符。由于并非原始字符串中的所有字符都是ASCII,we tell the string that it's OK to do a "lossy" conversion。换句话说,可以将“é”变成“e”,依此类推。

一旦我们得到了字节数组,我们只需将其转换回字符串即可,我们就完成了! :)

答案 1 :(得分:2)

CFStringTransform

当您处理特定语言时,CFStringTransform是解决方案。它以简化规范化,索引和搜索的方式音译字符串。例如,它可以使用选项kCFStringTransformStripCombiningMarks

删除重音符号
CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, CFSTR("Schläger"));
   CFStringTransform(string, NULL, kCFStringTransformStripCombiningMarks,
     false);
... => string is now “Schlager” CFRelease(string);
当您处理非拉丁语书写系统(例如阿拉伯语中文)时,

CFStringTransform会更加强大。它可以将许多书写系统转换为拉丁文脚本,使标准化更加简单。

例如,您可以将中文脚本转换为拉丁文脚本,如下所示:

CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, CFSTR("你好"));
CFStringTransform(string, NULL, kCFStringTransformToLatin, false);
... => string is now “nˇı hˇao”
CFStringTransform(string, NULL, kCFStringTransformStripCombiningMarks,
false);
... => string is now “ni hao” CFRelease(string);

请注意,该选项只是kCFStringTransformToLatin

  

不需要源语言。你几乎可以把任何字符串交给   这种变换无需先知道它是什么语言。   CFStringTransform也可以从拉丁文脚本音译到其他   写作系统,如阿拉伯语,韩语,希伯来语和泰语。

参考文献:iOS 7 Programming: Pushing to the limits