最近在開發(fā)iOS App時,遇到了一個問題:無法解析Emoji表情符號。
在App中,我需要將服務(wù)器返回的json數(shù)據(jù)解析成NSDictionary或NSArray,然后顯示在界面上。但是當json數(shù)據(jù)中包含Emoji表情符號時,解析器會報錯。
{ "name": "John", "age": 25, "message": "Hello, World! \uD83D\uDE0A" }
上面的json數(shù)據(jù)中,包含了一個Emoji表情符號“笑臉”,其Unicode編碼是“\uD83D\uDE0A”。
在解析json數(shù)據(jù)時,系統(tǒng)會將其轉(zhuǎn)換成NSString類型,并且轉(zhuǎn)義成“\\uD83D\\uDE0A”,但是在轉(zhuǎn)換成NSDictionary或NSArray時,系統(tǒng)又會將其還原成“\uD83D\uDE0A”,這時候解析器就無法識別該字符,從而報錯。
為了解決這個問題,我們可以使用NSJSONSerialization類提供的NSJSONReadingAllowFragments選項,該選項可以讓解析器忽略不標準的json格式,比如無法解析的字符:
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding]; NSError *error = nil; id json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&error]; if (json && [json isKindOfClass:[NSDictionary class]]) { NSDictionary *dict = (NSDictionary *)json; ... }
在解析json數(shù)據(jù)時,我們需要使用NSJSONReadingAllowFragments選項,并且需要判斷解析后的對象類型是否是NSDictionary或NSArray。這樣就可以解決無法解析Emoji表情符號的問題了。
總之,在開發(fā)iOS App時,我們需要注意json無法解析Emoji的問題,并使用NSJSONSerialization提供的選項來解決這個問題。