IOS 如何获取汉字字符串的拼音

   NSMutableString *result = [NSMutableString stringWithString:@"今天的天真的很蓝"];
    //先转换为带声调的拼音
    CFStringTransform((CFMutableStringRef)result,NULL, kCFStringTransformMandarinLatin,NO);
    NSLog(@"1............%@",result);
    //再转换为不带声调的拼音
    CFStringTransform((CFMutableStringRef)result,NULL, kCFStringTransformStripDiacritics,NO);
    NSLog(@"2............%@",result);

输出:

2016-02-15 15:51:20.844 BezierPathDemo[7368:202200] 1............jīn tiān de tiān zhēn de hěn lán

2016-02-15 15:51:20.846 BezierPathDemo[7368:202200] 2............jin tian de tian zhen de hen lan

CFStringTransform 中的 transform 参数涉及的内容很多。这里有个它能做什么的概述:

CFStringTransform 中的 transform 参数涉及的内容很多。这里有个它能做什么的概述:

去掉重音和变音符

Énġlišh långuãge lẳcks iñterêßţing diaçrïtičş. 如此类的字符串,把扩展的拉丁字符集正则化为 ASCII 友好型的表示,它非常有用。用 kCFStringTransformStripCombiningMarks 变换来去掉任意字符串中弯弯扭扭的符号。

为 Unicode 字符命名

kCFStringTransformToUnicodeName 让你可以找出特殊字符的 Unicode 标准名,包括 Emoji。例如:"" 被转换成 "{SHEEP} {DASH SYMBOL} {SPARKLES}",而 "" 变成了 "{PIG FACE}"。

不同拼写之间转写

除了英语这个重大例外(和它那令人愉快的拼写不一致),书写系统一般是将语言音调编码成一致的符号表示。欧洲语言一般使用拉丁字母(外加一些变音符),俄罗斯用西里尔字母,日本用平假名和片假名,泰国、韩国和阿拉伯国家也都有自己的字母。

虽然每种语言都有特殊的音调列表,也许有些其他语言会缺失,所有主要书写系统的交集已经足以让你高效的在不同字母之间转写(不要跟翻译搞混了)。

CFStringTransform 可以在拉丁语和阿拉伯语、西里尔语、希腊语、韩语(韩国)、希伯来语、日语(平假名和片假名)、普通话、泰语之间来回转写。

Transformation Input Output
kCFStringTransformLatinArabic mrḥbạ مرحبا
kCFStringTransformLatinCyrillic privet привет
kCFStringTransformLatinGreek geiá sou γειά σου
kCFStringTransformLatinHangul annyeonghaseyo 안녕하세요
kCFStringTransformLatinHebrew şlwm שלום
kCFStringTransformLatinHiragana hiragana ひらがな
kCFStringTransformLatinKatakana katakana カタカナ
kCFStringTransformLatinThai s̄wạs̄dī สวัสดี
kCFStringTransformHiraganaKatakana にほんご ニホンゴ
kCFStringTransformMandarinLatin 中文 zhōng wén

并且这只是用了核心类库中常量定义!直接传入一个ICU transform表达式,CFStringTransform 还可以在拉丁语和阿拉伯语、亚美尼亚语、注音、西里尔字母、格鲁吉亚语、希腊语、汉语、韩语、希伯来语、平假名、印度语(梵文,古吉拉特语,旁遮普文,卡纳达语,马拉雅拉姆语,奥里雅语,泰米尔语,特卢固)、朝鲜语、片假名、叙利亚语、塔纳文、泰语之间转写。

正则化用户产生的内容

字符串变换的一个更实际的应用是正则化不可预知的用户输入。即使你的应用并不单独处理其他语言,你也应当能智能地处理用户向你的应用输入的任何内容。

例如,你想在设备上建立一个可搜索的电影索引,它包含世界各地的人的问候:

  • 首先,应用 kCFStringTransformToLatin 变换将所有非英文文本转换为拉丁字母表示。

Hello! こんにちは! สวัสดี! مرحبا! 您好! → Hello! kon'nichiha! s̄wạs̄dī! mrḥbạ! nín hǎo!

  • 然后,应用 kCFStringTransformStripCombiningMarks 变换来去除变音符和重音。

Hello! kon'nichiha! s̄wạs̄dī! mrḥbạ! nín hǎo! → Hello! kon'nichiha! swasdi! mrhba! nin hao!

  • 最后,用 CFStringLowercase 转为小写,并用CFStringTokenizer 分词用作文本的索引。

(hello, kon'nichiha, swasdi, mrhba, nin, hao)

通过对用户输入的文本使用同样的变换,你就可以实现一个通用的搜索,无论搜索文本或内容是什么语言!


CFStringTransform 会是个用来按你的要求处理语言的十分强大的工具。并且它是,且仅仅是等着你勇敢地投入Objective-C的温暖怀抱的许多强大特性之一。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值