先給大家說下問題描述
伺服器端不支援Emoji表情,因此用戶端在上傳使用者輸入時,不能包含Emoji表情。
解決方案
在用戶端發送請求前,判斷使用者輸入中是否含有表情,如果含有表情,則提示使用者重新輸入。這個過程關鍵是如何判斷字串中是否含有Emoji表情。要判斷是否含有Emoji表情,必須先瞭解什麼是Emoji。
Emoji 是一套起源於日本的12x12像素Emoji,由栗田穣崇(Shigetaka Kurit)創作,最早在日本網路及手機使用者中流行,自蘋果公司發布的iOS 5IME中加入了emoji後,這種Emoji開始席捲全球,目前emoji已被大多數現代電腦系統所相容的Unicode編碼採納,普遍應用於各種手機簡訊和社交網路中。
以上是摘自百度百科裡的一段話,Emoji表情最終會被編碼成Unicode,因此,只要知道Emoji表情的Unicode編碼的範圍,就可以判斷使用者是否輸入了Emoji表情。以下是具體代碼,我這裡寫成了NSString的一個分類
@implementation NSString (Emoji)+ (BOOL)stringContainsEmoji:(NSString *)string{__block BOOL returnValue = NO;[string enumerateSubstringsInRange:NSMakeRange(0, [string length]) options:NSStringEnumerationByComposedCharacterSequences usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {const unichar hs = [substring characterAtIndex:0];if (0xd800 <= hs && hs <= 0xdbff) {if (substring.length > 1) {const unichar ls = [substring characterAtIndex:1];const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;if (0x1d000 <= uc && uc <= 0x1f77f) {returnValue = YES;}}} else if (substring.length > 1) {const unichar ls = [substring characterAtIndex:1];if (ls == 0x20e3) {returnValue = YES;}} else {if (0x2100 <= hs && hs <= 0x27ff) {returnValue = YES;} else if (0x2B05 <= hs && hs <= 0x2b07) {returnValue = YES;} else if (0x2934 <= hs && hs <= 0x2935) {returnValue = YES;} else if (0x3297 <= hs && hs <= 0x3299) {returnValue = YES;} else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {returnValue = YES;}}}];return returnValue;}
本段代碼親測管用,歡迎大家參考。
以上所述是小編給大家介紹的iOS中判斷Emoji表情問題,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!