热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

NSString与Unicode(苹果API跟你开的一点小玩笑)

NSString的API中有一个rangeOfString:,这个也是大家常用的在字符串中查找的的Api。我一般图省事,都是用这个,很少用rangeOfString:option:

NSString的API中有一个rangeOfString:,这个也是大家常用的在字符串中查找的的Api。我一般图省事,都是用这个,很少用rangeOfString:option:



正是因为偷懒,才导致了我一个crash,真是记忆深刻。


下面,我先举一个例子:

明明有一个":",结果就是找不到.这样导致了我以后代码出现的crash。这次不是说这个crash,而是要找到原因,为啥这个":",找不到呢。

打印一下length,竟然是2。那为啥找不到呢.换一种方式:

找到了!!!!!


问题解决了,但是为啥会这样呢?


这个就得看看Unicode的构成了。


Unicode对于组成有两种形式:合成形式与分解形式。


而NSString的rangeOfString,这个api对此的支持是这样的。rangeOfString,默认不是按照码元来查找的,也就是不是按照literalSearch.虽然它里面包含":",但是,这两个字符可以合成另一个与其等价的字符,所以就找不到了。


合成字符有的在Unicode字符表中有对应的形式,有的没有。我举得例子就没有。这得根据各种字符的具体规则定义,比如字符+西里尔字母,就能组出很多种奇怪的字符。


提醒:


如果要在NSString查找字符,一定要带上option。因为NSString与Unicode还是有很多坑的。


最后,推荐几篇写的比较好的文章,介绍NSString与Unicode的。

http://objccn.io/issue-9-1/

http://blog.swanspace.org/ramble_unicode/


推荐阅读
author-avatar
重羽玉婷018
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有