自定義表情鍵盤-將十六進(jìn)制的編碼轉(zhuǎn)為emoji字符

Swift:
import Foundation

extension String{
    
    func emojiStr() -> String {
        //1.在一段字符串中查找十六進(jìn)制的字符串
        let scanner = NSScanner(string: self)
        //2.將查找的字符串轉(zhuǎn)換為十六進(jìn)制的數(shù)字
        var value: UInt32 = 0
        scanner.scanHexInt(&value)
        //3.將十六進(jìn)制的數(shù)字轉(zhuǎn)化為 unicode字符
        let charCode = Character(UnicodeScalar(value))
        //4.將uniconde字符轉(zhuǎn)換 字符串
        
        return "\(charCode)"
        
    }
}
Objective-C:

.h

#import <Foundation/Foundation.h>

@interface NSString (Emoji)
/**
 *  將十六進(jìn)制的編碼轉(zhuǎn)為emoji字符
 */
+ (NSString *)emojiWithIntCode:(long)intCode;

/**
 *  將十六進(jìn)制的編碼轉(zhuǎn)為emoji字符
 */
+ (NSString *)emojiWithStringCode:(NSString *)stringCode;
- (NSString *)emoji;

/**
 *  是否為emoji字符
 */
- (BOOL)isEmoji;
@end

.m

#import "NSString+Emoji.h"
#define EmojiCodeToSymbol(c) ((((0x808080F0 | (c & 0x3F000) >> 4) | (c & 0xFC0) << 10) | (c & 0x1C0000) << 18) | (c & 0x3F) << 24)

@implementation NSString (Emoji)

+ (NSString *)emojiWithIntCode:(long)intCode {
    NSString * s = [NSString stringWithFormat:@"%ld",intCode];
    int symbol = EmojiCodeToSymbol([s intValue]);
    NSString *string = [[NSString alloc] initWithBytes:&symbol length:sizeof(symbol) encoding:NSUTF8StringEncoding];
    if (string == nil) { // 新版Emoji
        string = [NSString stringWithFormat:@"%C", (unichar)intCode];
    }
    return string;
}

- (NSString *)emoji
{
    return [NSString emojiWithStringCode:self];
}

+ (NSString *)emojiWithStringCode:(NSString *)stringCode
{
    char *charCode = (char *)stringCode.UTF8String;
    long intCode = strtol(charCode, NULL, 16);
    return [self emojiWithIntCode:intCode];
}

// 判斷是否是 emoji表情
- (BOOL)isEmoji
{
     BOOL returnValue = NO;
         
     const unichar hs = [self characterAtIndex:0];
     // surrogate pair
     if (0xd800 <= hs && hs <= 0xdbff) {
         if (self.length > 1) {
             const unichar ls = [self characterAtIndex:1];
             const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
             if (0x1d000 <= uc && uc <= 0x1f77f) {
                 returnValue = YES;
             }
         }
     } else if (self.length > 1) {
         const unichar ls = [self characterAtIndex:1];
         if (ls == 0x20e3) {
             returnValue = YES;
         }
     } else {
         // non surrogate
         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;
}
@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竭讳,一起剝皮案震驚了整個(gè)濱河市坦刀,隨后出現(xiàn)的幾起案子踩娘,更是在濱河造成了極大的恐慌趾访,老刑警劉巖捅儒,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摧扇,死亡現(xiàn)場(chǎng)離奇詭異祟剔,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)芒涡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門柴灯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)卖漫,“玉大人,你說(shuō)我怎么就攤上這事赠群⊙蚴迹” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵查描,是天一觀的道長(zhǎng)突委。 經(jīng)常有香客問(wèn)我,道長(zhǎng)冬三,這世上最難降的妖魔是什么匀油? 我笑而不...
    開(kāi)封第一講書人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮勾笆,結(jié)果婚禮上敌蚜,老公的妹妹穿的比我還像新娘。我一直安慰自己窝爪,他們只是感情好弛车,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蒲每,像睡著了一般纷跛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邀杏,一...
    開(kāi)封第一講書人閱讀 51,274評(píng)論 1 300
  • 那天忽舟,我揣著相機(jī)與錄音,去河邊找鬼淮阐。 笑死叮阅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泣特。 我是一名探鬼主播浩姥,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼状您!你這毒婦竟也來(lái)了勒叠?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤膏孟,失蹤者是張志新(化名)和其女友劉穎眯分,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體柒桑,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡弊决,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片飘诗。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡与倡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出昆稿,到底是詐尸還是另有隱情纺座,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布溉潭,位于F島的核電站净响,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏喳瓣。R本人自食惡果不足惜馋贤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夫椭。 院中可真熱鬧掸掸,春花似錦、人聲如沸蹭秋。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)仁讨。三九已至羽莺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間洞豁,已是汗流浹背盐固。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,852評(píng)論 1 269
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像曙咽,于是被迫代替她去往敵國(guó)和親蛔趴。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354

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

  • Swift從2014年發(fā)布到現(xiàn)在例朱,馬上接近三年孝情,經(jīng)過(guò)蘋果的不斷改進(jìn)和完善,語(yǔ)法方面已經(jīng)趨于穩(wěn)定洒嗤。如果是新建的項(xiàng)目箫荡,...
    Lebron_James閱讀 8,598評(píng)論 4 43
  • 感謝群主整理了EPUB版本,轉(zhuǎn)換后導(dǎo)入Kindle渔隶,獲得了優(yōu)秀的閱讀體驗(yàn)羔挡,終于可以靜心的欣賞笑來(lái)的杰作。 邊讀邊寫...
    劦力閱讀 222評(píng)論 0 1
  • 下個(gè)輪回時(shí) 我終將離去 你沉默佇立 深知再無(wú)下一次相聚 東南季風(fēng)吹起 桃李下自成蹊 軒窗是你的名字 也是時(shí)間的縫隙...
    61快滾去背單詞_閱讀 251評(píng)論 3 5
  • 響應(yīng)李克老師讀《非顯著趨勢(shì)》的號(hào)召,與您分享我的讀書筆記婉弹。 讀書: 非顯著趨勢(shì)(1) 如何把握即將到來(lái)的機(jī)會(huì)睬魂。什么...
    馬唐閱讀 431評(píng)論 0 0