使用CFStringTransform将汉字转换为拼音
2024-09-05 23:23:13
之前做通讯录相关的一些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
最新文章
- anelife
- ArcSoft's Office Rearrangement---hdu5933
- 转载yield关键字理解
- 查看oracle 启动了多久
- 大数据笔记05:大数据之Hadoop的HDFS(数据管理策略)
- Windows Server 2012如果打开网页慢下载快的话
- 高CPU业务场景下的任务分发方案Gearman搭建一览
- 【洛谷P3649】回文串
- python进阶(一)
- 【golang-GUI开发】QSS的使用(一)———QSS入门指南
- codeforces 1058D.Vasya and Triangle (gcd)
- Lua 语言变量
- Linux下解压.tar.xz格式文件的方法
- vue-cli内部webpack的打包优化
- 4.3 使用 SQL 语句操作数据框
- 使用easyui将json数据生成数据表格
- url override and HttpSession implements session
- 个人集群部署hadoop 2.7 + hive 2.1
- JDK源码分析 – HashMap
- CentOS7下Firewall常用命令