你好,歡迎來到IOS教程網

 Ios教程網 >> IOS訊息 >> 關於IOS >> NSString 與 Unicode (蘋果API 跟你開的一點小玩笑)

NSString 與 Unicode (蘋果API 跟你開的一點小玩笑)

編輯:關於IOS

前言:

NSString是大家最常用的一個類,幾乎人人都脫離不開,它的功能非常強大,但是它其中有點奧秘直到碰到了才發現。

正文:

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

正是因為偷懶,才導致了我一個crash,真是記憶深刻。

下面,我先舉一個例子:
NSString 與 Unicode (蘋果API 跟你開的一點小玩笑)

明明有一個":",結果就是找不到.這樣導致了我以後代碼出現的crash。這次不是說這個crash,而是要找到原因,為啥這個":",找不到呢。
NSString 與 Unicode (蘋果API 跟你開的一點小玩笑)

打印一下length,竟然是2。那為啥找不到呢.換一種方式:
NSString 與 Unicode (蘋果API 跟你開的一點小玩笑)

找到了!!!!!

問題解決了,但是為啥會這樣呢?

這個就得看看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/

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved