之前做通讯录相关的一些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

参考文章

http://nshipster.com/cfstringtransform/

使用CFStringTransform将汉字转换为拼音相关推荐

  1. 将汉字转换为拼音或者翻转

    //讲汉字转换为拼音 - (NSString *)pinyinOfString{ NSMutableString * string = [[[NSMutableString alloc] initWi ...

  2. JAVA实现汉字转换为拼音 pinyin4j/JPinyin

    转载自  JAVA实现汉字转换为拼音 pinyin4j/JPinyin 在项目中经常会遇到需求用户输入汉字后转换为拼音的场景,比如说通讯录,就会要求按名字首字符发音排序,如果自己写实现这方面的功能是个 ...

  3. php 将汉字转换成拼音,利用PHP怎么将汉字转换为拼音

    利用PHP怎么将汉字转换为拼音 发布时间:2020-12-17 15:36:59 来源:亿速云 阅读:83 作者:Leah 这篇文章将为大家详细讲解有关利用PHP怎么将汉字转换为拼音,文章内容质量较高 ...

  4. 程序实现汉字转换为拼音

    做了一个讯飞语音识别的项目,API返回的识别结果是汉字格式.需要提取关键字与数据库中的数据进行匹配,为提高数据的识别率.考虑到需要将数据库中的文字和识别后的数据转换为拼音的形式进行匹配.但也没找到相关 ...

  5. Excel2007将汉字转换为拼音首字母

    Excel2007将汉字转换为拼音首字母 一.打开Excel,按下"Alt+F11"组合键,弹出"Visual Basic编辑器" 二.点击"Visu ...

  6. java 汉字转换为拼音

    需要引入pinyin4j  , 没有文件上传,pinyin4j 上传不上来 import java.io.UnsupportedEncodingException; import net.source ...

  7. 将汉字转换为拼音:pypinyin.pinyin()

    [小白从小学Python.C.Java] [计算机等级考试+500强双证书] [Python-数据分析] 将汉字转换为拼音 pypinyin.pinyin() 选择题 下列说法错误的是? import ...

  8. 汉字转换为拼音Java工具类

    声明:本文是对https://www.cnblogs.com/DreamDrive/p/5762078.html的整理,感谢博主分享. 我就是爱音乐~ 准备工作:在pom.xml中引入依赖. < ...

  9. java 中文转成_Java实现汉字转换为拼音 [转]

    代码说明: Java实现汉字转换为拼音的GUI版本. GUI代码部分: /** * @(#)CnToSpellGUI.java * kindani * 2004-10-25?? * */ import ...

最新文章

  1. select resharper shortcuts scheme
  2. mac下natapp使用
  3. 为什么会存在TIME_WAIT socket-详细分析No buffer space available
  4. mysql检索面试题目_MySQL面试题目二十七道整理
  5. 二级VB培训笔记11:培训答疑集
  6. linux rdma测试,硬件RDMA的驱动配置和测试
  7. sql 在某表中加入一列count所有数据_执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?...
  8. Memcache入门知识
  9. 如何看懂wsdl文件
  10. 【ISWC2021】当知识图谱遇上零样本视觉问答
  11. 基于buck电路的小型永磁同步电机最大功率跟踪控制
  12. WordPress纯代码纯静态开启七牛CDN并集成七牛缩略图和水印功能
  13. 微信小程序开发前端基础知识
  14. Snort 中文手册【http://snort.org.cn/】
  15. <Linux开发> ubuntu开发工具-Ubuntu测试网速及实时网速图
  16. 苹果怎么登录服务器未响应,王者荣耀登陆游戏服务器未响应该怎么解决 王者荣耀无法登陆解决办法...
  17. 做量化交易需要了解的国外在线量化平台有哪些?
  18. 《计算机操作系统(计算机)》
  19. Python报错:TypeError: Cannot interpret ‘1‘ as a data type
  20. 叶新伟 php,基于php+mysql技术bbs论坛设计的开发与实现最终版(样例3)

热门文章

  1. bootstrap3 第2课:表单验证
  2. 云ERP系统实施的整体流程是什么?
  3. java 获取日期是否是工作日(包括正常工作日和节假日调休补班)
  4. VIVO:笔试题(20190911)
  5. 汉诺塔(Hanoi)是必须用递归方法才能解决的经典问题。它来自于印度神话。上帝创造世界时作了三根金刚石柱子,在第一根柱子上从下往上按大小顺序摞着64片黄金圆盘,如图7-3所示。
  6. 2023年 网络信息安全工程师 就业发展前景如何?
  7. 主从数据库部署(centos7)
  8. docker部署主从数据库
  9. 基于spring 的开源框架
  10. 程序员在囧途之招聘历险记