iOS emoji表情轉(zhuǎn)碼 或者判斷

如果項(xiàng)目中有評(píng)論或者信息恢復(fù)的地方饥漫,往往會(huì)用到emoji,有時(shí)候如后臺(tái)不支持emoji,就會(huì)顯示亂碼錯(cuò)誤诊胞,我們可以把emoji轉(zhuǎn)成unicode編碼或者utf8編碼格式傳給服務(wù)器。當(dāng)然如果后臺(tái)服務(wù)器接收的時(shí)候能做好判斷識(shí)別最好锹杈,我們這邊后臺(tái)是支持的撵孤,我僅記錄一下方法,以備不時(shí)之需竭望。

先定義一個(gè)UITextView 并設(shè)置代理

設(shè)定一個(gè)宏定義邪码,用來判斷emoji

#defineMULITTHREEBYTEUTF16TOUNICODE(x,y) (((((x ^ 0xD800) << 2) | ((y ^ 0xDC00) >> 8)) << 8) | ((y ^ 0xDC00) & 0xFF)) + 0x10000

下面寫代理方法實(shí)現(xiàn)的內(nèi)容

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

{

NSString *hexstr = @"";

for (int i=0;i< [text length];i++)

{

hexstr = [hexstr stringByAppendingFormat:@"%@",[NSString stringWithFormat:@"0x%1X ",[text characterAtIndex:i]]];

}

NSLog(@"UTF16 [%@]",hexstr);

hexstr = @"";

long slen = strlen([text UTF8String]);

for (int i = 0; i < slen; i++)

{

//fffffff0 去除前面六個(gè)F & 0xFF

hexstr = [hexstr stringByAppendingFormat:@"%@",[NSString stringWithFormat:@"0x%X ",[text UTF8String][i] & 0xFF ]];

}

NSLog(@"UTF8 [%@]",hexstr);

hexstr = @"";

if ([text length] >= 2) {

for (int i = 0; i < [text length] / 2 && ([text length] % 2 == 0) ; i++)

{

// three bytes

if (([text characterAtIndex:i*2] & 0xFF00) == 0 ) {

hexstr = [hexstr stringByAppendingFormat:@"Ox%1X 0x%1X",[text characterAtIndex:i*2],[text characterAtIndex:i*2+1]];

}

else

{// four bytes

hexstr = [hexstr stringByAppendingFormat:@"U+%1X ",MULITTHREEBYTEUTF16TOUNICODE([text characterAtIndex:i*2],[text characterAtIndex:i*2+1])];

}

}

NSLog(@"(unicode) [%@]",hexstr);

}

else

{

NSLog(@"(unicode) U+%1X",[text characterAtIndex:0]);

}

return YES;

}


在輸入的時(shí)候,會(huì)自動(dòng)把輸入內(nèi)容轉(zhuǎn)成相應(yīng)的格式咬清。

如果在有些地方不需要輸入emoji表情闭专,可以做相關(guān)限制。

我這邊用到的是旧烧,如果用戶輸入emoji表情的時(shí)候影钉,會(huì)給出提示

//是否含有表情

- (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;

}


通過調(diào)用該方法,如果返回的是YES則輸入內(nèi)容含有emoji掘剪,反之平委。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市夺谁,隨后出現(xiàn)的幾起案子廉赔,更是在濱河造成了極大的恐慌,老刑警劉巖匾鸥,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜡塌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡勿负,警方通過查閱死者的電腦和手機(jī)岗照,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人攒至,你說我怎么就攤上這事厚者。” “怎么了迫吐?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵库菲,是天一觀的道長。 經(jīng)常有香客問我志膀,道長熙宇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任溉浙,我火速辦了婚禮烫止,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘戳稽。我一直安慰自己馆蠕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布惊奇。 她就那樣靜靜地躺著互躬,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颂郎。 梳的紋絲不亂的頭發(fā)上吼渡,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音乓序,去河邊找鬼寺酪。 笑死,一個(gè)胖子當(dāng)著我的面吹牛替劈,可吹牛的內(nèi)容都是我干的房维。 我是一名探鬼主播,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼抬纸,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼咙俩!你這毒婦竟也來了耘擂?” 一聲冷哼從身側(cè)響起蹬挺,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤畔咧,失蹤者是張志新(化名)和其女友劉穎凌彬,沒想到半個(gè)月后伞广,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谐宙,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡拇派,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年劈猪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了墅茉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片命黔。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡呜呐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出悍募,到底是詐尸還是另有隱情蘑辑,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布坠宴,位于F島的核電站洋魂,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喜鼓。R本人自食惡果不足惜副砍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庄岖。 院中可真熱鬧豁翎,春花似錦、人聲如沸隅忿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硼控。三九已至,卻和暖如春胳赌,著一層夾襖步出監(jiān)牢的瞬間牢撼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來泰國打工疑苫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留熏版,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓捍掺,卻偏偏與公主長得像撼短,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挺勿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 如果項(xiàng)目中有評(píng)論或者信息恢復(fù)的地方曲横,往往會(huì)用到emoji,有時(shí)候如后臺(tái)不支持emoji不瓶,就會(huì)顯示亂碼錯(cuò)誤禾嫉,我們可以...
    華楠閱讀 1,518評(píng)論 0 0
  • UITextView/UITextField檢測(cè)并過濾Emoji表情符號(hào) 本人在開發(fā)過程中遇到過這種情況,服務(wù)器端...
    蒲公英少年閱讀 6,522評(píng)論 3 19
  • z在項(xiàng)目中蚊丐,要求用戶評(píng)論超過10行或者超過400字節(jié)顯示“...read more”類似微信的展開全文熙参,這個(gè)功能已...
    zhanghengiOS閱讀 2,608評(píng)論 0 5
  • 也遇到很多的人,我不知道你會(huì)不會(huì)來麦备,會(huì)不會(huì)遇見我孽椰,你也是不是在等我這樣的人… 我已經(jīng)準(zhǔn)備好了昭娩,你可以慢...
    水平線閱讀 141評(píng)論 0 0
  • 那一年,他17歲黍匾,她15歲栏渺。 一個(gè)男孩,站在海邊膀捷,閉著雙眼迈嘹,悠閑的吹著海風(fēng)在沙灘上拉小提琴。 有一天全庸,男孩登QQ秀仲,...
    花默語閱讀 355評(píng)論 9 3