iOS-使用CFStringTransform将汉字转换为拼音

CFStringTransform-知识要点
[详解]
  • 1.简介

    iOS在CoreFoundation中提供了CFStringTransform函数,但在 Foundation中却没有相对应的方法。它的定义如下:

         Boolean CFStringTransform(CFMutableStringRef string, CFRange *range,  CFStringRef transform, Boolean reverse);
  • 2.参数解析:

    string->要转换的string

      比如要转换的中文,同时它是mutable的,因此也可直接作为最终转换后的字符串。

    range->要转换的范围,同时输出转换后改变的范围

       如果为NULL,视为全部转换。

    transform->指定要进行什么样的转换

      可以指定多种语言的拼写转换。

    reverse->该转换是否必须是可逆向转换的

       如果转换成功就返回true,否则返回false
  • 3.转换方法
    3.1如果要进行汉字到拼音的转换
    --可以将transform设定为kCFStringTransformMandarinLati
    --或者是kCFStringTransformToLatin
      kCFStringTransformToLatin也可适用于非汉字字符串
    3.2代码示例:
     CFMutableStringRef string =CFStringCreateMutableCopy(NULL, 0, CFSTR("中国"));
     CFStringTransform(string,NULL,kCFStringTransformMandarinLatin, NO);
     NSLog(@"%@", string);

    这段代码将输出:

     2016-7-4 14:41:14.644 Test[2436:907] zhōng guó
    • 解析:
      • 可以看出,CFStringTransform 正确的输出了“中国”的拼音,而且还带上了音标。
        -->有时候我们不需要音标怎么办?
      • 还好CFStringTransform同时提供了将音标字母转换为普通字母的方法kCFStringTransformStripDiacritics。
        >我们在上面的代码基础上再加上这个:
          CFStringTransform(string,NULL,kCFStringTransformStripDiacritics, NO);
          NSLog(@"%@", string);
        $$$->那么最终将输出
          2016-7-4 14:47:00.380 Test[2470:907] zhong guo
  • 4.示例代码:
    • 主要逻辑:
      CFStringTransform中string参数是要转换的中文字符串,需要将它转化成mutable的,该方法将它最终转成中文的拼音字符串,系统会将每个汉字的拼音用空格分隔开,可将空格替换将其拼接在一起。range是要转换的范围,同时输出转换后改变的范围,如果为nil,代表全部转换,也可传入UnsafeMutablePointer(bitPattern: 0)。transform则指定要进行什么样的转换,这里可以指定多种语言的拼写转换。reverse指定该转换是否必须是可逆向转换的。返回true表示转换成功,false表示转换失败。
       /**  中文转拼音  */
      - (NSString *)pinYinWithString:(NSString *)chinese
      {
         NSString  * pinYinStr = [NSString string];
       if (chinese.length){
         NSMutableString * pinYin = [[NSMutableString alloc]initWithString:chinese];
       //1.先转换为带声调的拼音
       if(CFStringTransform((__bridgeCFMutableStringRef)pinYin, 0, kCFStringTransformMandarinLatin, NO)) {
                    NSLog(@"pinyin: %@", pinYin);
      }
       //2.再转换为不带声调的拼音
       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添加个分类,实现该方法。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值