iOS 将汉字转换为拼音
2015-08-03 10:00
585 查看
转自http://blog.csdn.net/meegomeego/article/details/23253939#comments
iOS在CoreFoundation中提供了CFStringTransform函数,但在Foundation中却没有相对应的方法。它的定义如下:
其中
如果要进行汉字到拼音的转换,我们只需要将
这段代码将输出:
可以看出,
那么最终将输出:
之前做通讯录相关的一些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或者
kCFStringTransformToLatin(
kCFStringTransformToLatin也可适用于非汉字字符串):
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学习笔记3 - 关于Info.plist
- iOS学习笔记2-IOS8系列之应用扩展
- [iOS]如何动态获取键盘的高度
- iOS学习笔记1-开发的一些奇巧淫技
- iOS蓝牙4.0开发01-前期准备
- iOS开发-地图03-地理编码
- iOS 静态库终端运行错误Non-fat file: libSFLogin_SDK.a is architecture: arm64
- IOS中用正则表达式判断输入的内容为8-16位且同时包含数字和字母
- iOS 打包支持所有指令集的静态库
- IOS AudioServicesPlaySystemSound 系统声音提示
- iOS应用性能优化技巧和建议
- iOS开发-地图02-指南针
- iOS开发-地图01-corelocation
- iOS中的生成随机数方法
- 视频聊天插件:AnyChat使用攻略之iOS开发指南
- 视频聊天插件:AnyChat使用攻略之iOS开发指南
- ios--c DAY_4
- ios--c DAY_3
- 精通iOS
- iOS笔记060 - 自定义控件