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;
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容