在ios開發(fā)中經(jīng)常碰需要將漢字轉(zhuǎn)成拼音的情況,以下就是我把漢字轉(zhuǎn)成拼音的方法
代碼實(shí)現(xiàn)
+ (NSString *)transform:(NSString *)chinese{
//將NSString裝換成NSMutableString
NSMutableString *pinyin = [chinese mutableCopy];
//將漢字轉(zhuǎn)換為拼音(帶音標(biāo))
CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformMandarinLatin, NO);
NSLog(@"%@", pinyin);
//去掉拼音的音標(biāo)
CFStringTransform((__bridge CFMutableStringRef)pinyin, NULL, kCFStringTransformStripCombiningMarks, NO);
NSLog(@"%@", pinyin);
//返回最近結(jié)果
return pinyin;
}
用kCFStringTransformMandarinLatin
方法轉(zhuǎn)化出來的是帶音標(biāo)的拼音凹蜂,如果需要去掉音標(biāo),則繼續(xù)使用kCFStringTransformStripCombiningMarks
方法即可吩抓。
方法介紹
在iOS中實(shí)現(xiàn)上述功能,其實(shí)主要是CFStringTransform
方法出了大力氣赴恨,我們來重點(diǎn)介紹下這個(gè)方法
//函數(shù)原型
Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);
參數(shù)具體介紹
- string: 需要轉(zhuǎn)換的字符串疹娶。由于這個(gè)參數(shù)是 CFMutableStringRef 類型,一個(gè) NSMutableString 類型也可以通過自由橋接的方式傳入伦连。
- range: 轉(zhuǎn)換操作作用的范圍雨饺。這個(gè)參數(shù)是 CFRange顷啼,而不是 NSRange拆火。當(dāng)給定為NULL時(shí)拂到,操作范圍為全部渊抽。
- transform: 需要應(yīng)用的變換。這個(gè)參數(shù)使用了包含下面將提到的字符串常量的 ICU transform string签赃。
- reverse: 如有需要痪欲,是否返回反轉(zhuǎn)過的變換咬腋。
在上述參數(shù)中,重點(diǎn)也是難點(diǎn)的是 transform 參數(shù)叹哭,這個(gè)參數(shù)是一個(gè)CFStringRef類型的參數(shù)忍宋;來到頭文件,我們會(huì)發(fā)現(xiàn)风罩,這個(gè)參數(shù)的值有很多
我們來粗略的介紹下上面這些值的作用,如下圖:
從上圖我們可以看出舵稠,利用這些值超升,我們輸入左邊(Input)的語言,那么結(jié)果為右邊(Output)的;
上面有些還沒有介紹哺徊,就不再一一介紹了室琢,這里我再重點(diǎn)介紹一個(gè)我們上面用到的kCFStringTransformStripCombiningMarks
,他的功能就是去掉原有字符串中的音標(biāo)或者類似于音標(biāo)的符號(hào)落追。
本文主要參考:http://nshipster.cn/cfstringtransform/
歡迎大家踴躍評(píng)論盈滴,讓我們一起探討技術(shù)!轿钠!
如果覺得文章不錯(cuò)巢钓,請(qǐng)幫忙點(diǎn)擊文章下方的喜歡
!疗垛!
你的支持將是對(duì)我最好的鼓勵(lì), 謝謝V⑿凇!贷腕!