iOS 中文转拼音

转载 2015年11月20日 15:06:25

之前做通讯录相关的一些App时,有一个比较常用的算法是将汉字转换成拼音。当时采用的做法是:将各个拼音段的首个汉字(按Unicode排序)做成两个数组,一个数组存拼音,另一个数组存拼音对应首个汉字的Unicode。如果要获取某个汉字的拼音,可以折半查找法找的对应拼音。最近无意间发现CFStringTransform这篇文章后,发现系统本身已经提供了一个这样的函数。

CFStringTransform

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

Boolean CFStringTransform(CFMutableStringRef string, CFRange *range, CFStringRef transform, Boolean reverse);

其中string参数是要转换的string,比如要转换的中文,同时它是mutable的,因此也直接作为最终转换后的字符串。range是要转换的范围,同时输出转换后改变的范围,如果为NULL,视为全部转换。transform可以指定要进行什么样的转换,这里可以指定多种语言的拼写转换。reverse指定该转换是否必须是可逆向转换的。如果转换成功就返回true,否则返回false

如果要进行汉字到拼音的转换,我们只需要将transform设定为kCFStringTransformMandarinLatin或者kCFStringTransformToLatinkCFStringTransformToLatin也可适用于非汉字字符串):

CFMutableStringRef string = CFStringCreateMutableCopy(NULL, 0, CFSTR("中国"));
CFStringTransform(string, NULL, kCFStringTransformMandarinLatin, NO);
NSLog(@"%@", string);

这段代码将输出:

2013-11-22 14:41:14.644 Test[2436:907] zhōng guó

可以看出,CFStringTransform正确的输出了“中国”的拼音,而且还带上了音标。有时候我们不需要音标怎么办?还好CFStringTransform同时提供了将音标字母转换为普通字母的方法kCFStringTransformStripDiacritics。我们在上面的代码基础上再加上这个:

CFStringTransform(string, NULL, kCFStringTransformStripDiacritics, NO);
NSLog(@"%@", string);

那么最终将输出:

2013-11-22 14:47:00.380 Test[2470:907] zhong guo

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

CFStringTransform-知识要点 [详解] 1.简介 iOS在CoreFoundation中提供了CFStringTransform函数,但在 Foundat...
  • qq_33701006
  • qq_33701006
  • 2016年07月04日 00:58
  • 1448

IOS开发把汉字转换成拼音的两种方法和返回拼音首字母

IOS 软件开发中汉字转换成拼音的两种方法
  • Boyqicheng
  • Boyqicheng
  • 2015年09月15日 20:43
  • 1776

ios开发系列之中文转拼音,去声调,首字母转大写

1) 声明一个为汉字的不可变字符串NSString * str = @"这是一个汉字";2) 将字符串转成c语言中的不可变字符串 CFStringRef strRef = (CFStringRe...
  • u012519228
  • u012519228
  • 2015年10月13日 19:42
  • 1285

ios开发 之 中文转拼音

在项目中显示通讯录往往需要把中文名字转换为拼音来进行排序,为此我封装了一个类,将中文转为拼音分享给大家。 思路主要为: 1、使用[CFStringTransform]的[kCFStringTran...
  • zeng_zhiming
  • zeng_zhiming
  • 2017年04月01日 02:35
  • 318

ios开发系列之中文转拼音,去声调,首字母转大写

1) 声明一个为汉字的不可变字符串NSString * str = @"这是一个汉字";2) 将字符串转成c语言中的不可变字符串 CFStringRef strRef = (CFStringRe...
  • u012519228
  • u012519228
  • 2015年10月13日 19:42
  • 1285

仿ios通讯录(带悬浮条,中文按拼音排序)

仿ios通讯录首先来看下效果图:
  • gubojun123
  • gubojun123
  • 2017年03月13日 17:39
  • 702

PHP的UTF-8中文转拼音处理类(性能已优化至极致)

优化了传统的拼音转换处理类的算法,专门针对UTF-8字符集进行处理。 如果你使用GBK或GB2312字符集,只需要去掉iconv函数,直接赋值,不需要转换就行。...
  • hzbigdog
  • hzbigdog
  • 2014年07月15日 15:38
  • 24354

Excel中文转拼音(完整版)

Excel中文转拼音(完整版) 打开Excel->工具->宏->Viaual Basic编辑器 在弹出来的窗口中对着VBAproject点右键->插入->模块 下面会出现一个名为"模块1",点击...
  • yxwmzouzou
  • yxwmzouzou
  • 2014年06月19日 15:43
  • 30828

java的中文转拼音组件---pinyin4j的使用

pinyin4j是一个功能强悍的汉语拼音工具包,主要是从汉语获取各种格式和需求的拼音,功能强悍,下面看看如何使用pinyin4j。下载地址:http://pinyin4j.sourceforge.ne...
  • cactusz
  • cactusz
  • 2017年07月06日 16:02
  • 77

C++里中文转拼音那点事

C++里中文转拼音那点事C里中文转拼音那点事 效果图 插叙 结尾效果图 在讲解前,让我们先来看下效果图,给你想继续看的心情O(∩_∩)O 插叙 这上代码前,让我们一起先了解下什么是UNICOD...
  • ly305750665
  • ly305750665
  • 2016年12月17日 20:54
  • 327
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS 中文转拼音
举报原因:
原因补充:

(最多只允许输入30个字)