android显示ios emoji表情符号,iOS emoji表情显示, 过滤emoji表情

// iOS中的表情符号是emoji表情,需要将表情符号进行转换,后台才能识别。识别方法:

NSString * str1 = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; (iOS 9后被另一个方法替换

NSString * str1 = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet characterSetWithCharactersInString:@"`#%^{}\"[]|\\<> "].invertedSet];

)

// 我们给后台上传的是Hahh%F0%9F%98%85这样的字符串,同样发回给我们的也是Hahh%F0%9F%98%85。

// 那么问题来了,我们要怎样识别这些表情字符,并将表情显示出来?这时就需要我们使用另一个方法,将表情符号识别并显示出来了

NSString * str2 = [str1 stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSLog(@"%@", str2);(iOS9之后被另一个方法替换:

NSString * str2 = [str1 stringByRemovingPercentEncoding];

0818b9ca8b590ca3270a3433284dd417.png

//过滤表情

+ (NSString *)filterEmoji:(NSString *)string {

NSUInteger len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];

const char *utf8 = [string UTF8String];

char *newUTF8 = malloc( sizeof(char) * len );

int j = 0;

//0xF0(4) 0xE2(3) 0xE3(3) 0xC2(2) 0x30---0x39(4)

for ( int i = 0; i < len; i++ ) {

unsigned int c = utf8;

BOOL isControlChar = NO;

if ( c == 4294967280 ||

c == 4294967089 ||

c == 4294967090 ||

c == 4294967091 ||

c == 4294967092 ||

c == 4294967093 ||

c == 4294967094 ||

c == 4294967095 ||

c == 4294967096 ||

c == 4294967097 ||

c == 4294967088 ) {

i = i + 3;

isControlChar = YES;

}

if ( c == 4294967266 || c == 4294967267 ) {

i = i + 2;

isControlChar = YES;

}

if ( c == 4294967234 ) {

i = i + 1;

isControlChar = YES;

}

if ( !isControlChar ) {

newUTF8[j] = utf8;

j++;

}

}

newUTF8[j] = '\0';

NSString *encrypted = [NSString stringWithCString:(const char*)newUTF8

encoding:NSUTF8StringEncoding];

free( newUTF8 );

return encrypted;

}

3.通过判断用户输入的字符串时候含有表情来进行对应的操作

//是否含有表情

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值