您好,欢迎来到二三娱乐。
搜索
您的当前位置:首页iOS 将中文转成拼音,并拼接

iOS 将中文转成拼音,并拼接

来源:二三娱乐

主要使用CFStringTransform方法:

  • Object-C : Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);

  • Swift : public func CFStringTransform(_ string: CFMutableString!, _ range: UnsafeMutablePointer!, _ transform: CFString!, _ reverse: Bool) -> Bool

其中string参数是要被转换的中文字符串,需要将它转化成mutable的,该方法将它最终转成中文的拼音字符串,系统会将每个汉字的拼音用空格分隔开,可将空格替换将其拼接在一起。range是要转换的范围,同时输出转换后改变的范围,如果为nil,代表全部转换,也可传入UnsafeMutablePointer(bitPattern: 0)。transform则指定要进行什么样的转换,这里可以指定多种语言的拼写转换。reverse指定该转换是否必须是可逆向转换的。

transform 参数值 说明
kCFStringTransformStripCombiningMarks 删除重音符号
kCFStringTransformToLatin 中文的拉丁字母
kCFStringTransformFullwidthHalfwidth 全角半宽
kCFStringTransformLatinKatakana 片假名拉丁字母
kCFStringTransformLatinHiragana 平假名拉丁字母
kCFStringTransformHiraganaKatakana 平假名片假名
kCFStringTransformMandarinLatin 普通话拉丁字母
kCFStringTransformLatinHangul 韩文的拉丁字母
kCFStringTransformLatinArabic 阿拉伯语拉丁字母
kCFStringTransformLatinHebrew 希伯来语拉丁字母
kCFStringTransformLatinThai 泰国拉丁字母
kCFStringTransformLatinCyrillic 西里尔拉丁字母
kCFStringTransformLatinGreek 希腊拉丁字母
kCFStringTransformToXMLHex 转换为XML十六进制字符
kCFStringTransformToUnicodeName 转换为Unicode的名称
kCFStringTransformStripDiacritics 转换成不带音标的符号
Object-C
- (NSString *)pinYinWithString:(NSString *)chinese{
    NSString  * pinYinStr = [NSString string];
    if (chinese.length){
        NSMutableString * pinYin = [[NSMutableString alloc]initWithString:chinese];
    
        //先转换为带声调的拼音
        if (CFStringTransform((__bridge CFMutableStringRef)pinYin, 0, kCFStringTransformMandarinLatin, NO)) {
            NSLog(@"pinyin: %@", pinYin);
        }
    
        //再转换为不带声调的拼音
        if (CFStringTransform((__bridge CFMutableStringRef)pinYin, 0, kCFStringTransformStripDiacritics, NO)) {
            NSLog(@"pinyin: %@", pinYin);
        
            //再去除空格,将拼音连在一起
            pinYinStr = [NSString stringWithString:pinYin];
        
            // 去除掉首尾的空白字符和换行字符
            pinYinStr = [pinYinStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

            // 去除掉其它位置的空白字符和换行字符
            pinYinStr = [pinYinStr stringByReplacingOccurrencesOfString:@"\r" withString:@""];
            pinYinStr = [pinYinStr stringByReplacingOccurrencesOfString:@"\n" withString:@""];
            pinYinStr = [pinYinStr stringByReplacingOccurrencesOfString:@" " withString:@""];
        }
    }
    return pinYinStr;
}
Swift

在String的扩展中添加该方法:

extension String{

    func pinYin() ->String{
        var pinYinStr = String();
        let pinyin:CFMutableString = NSMutableString(string: self) as CFMutableString;
    
        //先转换为带声调的拼音
        if CFStringTransform(pinyin, nil, kCFStringTransformMandarinLatin, false){
            print(pinyin);
        }
    
        //再转换为不带声调的拼音
        if CFStringTransform(pinyin, nil, kCFStringTransformStripDiacritics, false){
            print(pinyin);
        
            //再去除空格,将拼音连在一起
            pinYinStr = pinyin as String;
            pinYinStr = pinYinStr.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)
            pinYinStr = pinYinStr.replacingOccurrences(of: "\r", with: "")
            pinYinStr = pinYinStr.replacingOccurrences(of: "\n", with: "")
            pinYinStr = pinYinStr.replacingOccurrences(of: " ", with: "")
        }
        return pinYinStr;
    }

}

Copyright © 2019- yule263.com 版权所有 湘ICP备2023023988号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务