CFStringTransform-知識(shí)要點(diǎn)
[詳解]
-
1.簡(jiǎn)介
iOS在CoreFoundation中提供了CFStringTransform函數(shù)劫拗,但在 Foundation中卻沒有相對(duì)應(yīng)的方法为居。它的定義如下:
Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse); -
2.參數(shù)解析:
string->要轉(zhuǎn)換的string
比如要轉(zhuǎn)換的中文,同時(shí)它是mutable的忌怎,因此也可直接作為最終轉(zhuǎn)換后的字符串籍滴。
range->要轉(zhuǎn)換的范圍,同時(shí)輸出轉(zhuǎn)換后改變的范圍
如果為NULL榴啸,視為全部轉(zhuǎn)換孽惰。
transform->指定要進(jìn)行什么樣的轉(zhuǎn)換
可以指定多種語(yǔ)言的拼寫轉(zhuǎn)換。
reverse->該轉(zhuǎn)換是否必須是可逆向轉(zhuǎn)換的
如果轉(zhuǎn)換成功就返回true鸥印,否則返回false勋功。
-
3.轉(zhuǎn)換方法
3.1如果要進(jìn)行漢字到拼音的轉(zhuǎn)換
--可以將transform設(shè)定為kCFStringTransformMandarinLati --或者是kCFStringTransformToLatin kCFStringTransformToLatin也可適用于非漢字字符串
3.2代碼示例:
CFMutableStringRef string =CFStringCreateMutableCopy(NULL, 0, CFSTR("中國(guó)"));
CFStringTransform(string,NULL,kCFStringTransformMandarinLatin, NO);
NSLog(@"%@", string);
這段代碼將輸出:
2016-7-4 14:41:14.644 Test[2436:907] zhōng guó
解析:
- 可以看出,*CFStringTransform* 正確的輸出了“中國(guó)”的拼音库说,而且還帶上了音標(biāo)狂鞋。
######*-->有時(shí)候我們不需要音標(biāo)怎么辦?*
- 還好CFStringTransform同時(shí)提供了將音標(biāo)字母轉(zhuǎn)換為普通字母的方法kCFStringTransformStripDiacritics潜的。
**>我們?cè)谏厦娴拇a基礎(chǔ)上再加上這個(gè):**
CFStringTransform(string,NULL,kCFStringTransformStripDiacritics, NO);
NSLog(@"%@", string);
$$$->那么最終將輸出
2016-7-4 14:47:00.380 Test[2470:907] zhong guo
-
4.示例代碼:
- 主要邏輯:
CFStringTransform中string參數(shù)是要轉(zhuǎn)換的中文字符串骚揍,需要將它轉(zhuǎn)化成mutable的,該方法將它最終轉(zhuǎn)成中文的拼音字符串啰挪,系統(tǒng)會(huì)將每個(gè)漢字的拼音用空格分隔開信不,可將空格替換將其拼接在一起嘲叔。range是要轉(zhuǎn)換的范圍,同時(shí)輸出轉(zhuǎn)換后改變的范圍抽活,如果為nil硫戈,代表全部轉(zhuǎn)換,也可傳入U(xiǎn)nsafeMutablePointer(bitPattern: 0)酌壕。transform則指定要進(jìn)行什么樣的轉(zhuǎn)換掏愁,這里可以指定多種語(yǔ)言的拼寫轉(zhuǎn)換。reverse指定該轉(zhuǎn)換是否必須是可逆向轉(zhuǎn)換的卵牍。返回true表示轉(zhuǎn)換成功果港,false表示轉(zhuǎn)換失敗。
/** 中文轉(zhuǎn)拼音 */
- (NSString *)pinYinWithString:(NSString *)chinese
{
NSString * pinYinStr = [NSString string];
if (chinese.length){
NSMutableString * pinYin = [[NSMutableString alloc]initWithString:chinese];
//1.先轉(zhuǎn)換為帶聲調(diào)的拼音
if(CFStringTransform((__bridgeCFMutableStringRef)pinYin, 0, kCFStringTransformMandarinLatin, NO)) {
NSLog(@"pinyin: %@", pinYin);
}
//2.再轉(zhuǎn)換為不帶聲調(diào)的拼音
if (CFStringTransform((__bridgeCFMutableStringRef)pinYin, 0, kCFStringTransformStripDiacritics, NO)) {
NSLog(@"pinyin: %@", pinYin);
//3.去除掉首尾的空白字符和換行字符
pinYinStr = [pinYinStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
//4.去除掉其它位置的空白字符和換行字符
pinYinStr = [pinYinStr stringByReplacingOccurrencesOfString:@"\r" withString:@""];
pinYinStr = [pinYinStr stringByReplacingOccurrencesOfString:@"\n" withString:@""];
pinYinStr = [pinYinStr stringByReplacingOccurrencesOfString:@" " withString:@""];
}
}
return pinYinStr;
}
- 注意:也可給NSString添加個(gè)分類糊昙,實(shí)現(xiàn)該方法辛掠。