iOS移动开发社区DXSmile的收藏夹ios实用开发技巧

如何使服务器兼容Emoji表情符号的几种办法

2016-07-22  本文已影响2546人  洛少城

我们都知道服务器对emoji表情直接保存不兼容, 如果客户端直接把表情符号传给服务端保存的话, 会得到一个保存失败的错误, 那如何解决这个问题呢,下面列出几种解决的办法:

办法一:

#pragma mark - <UITextViewDelegate>

- (void)textViewDidChange:(UITextView *)textView
{
    NSLog(@"没有过滤前输入的字符串===%@",textView.text);
    NSString *filterString = [self disableEmoji:textView.text];
    NSLog(@"过滤Emoji表情后的字符串===%@",filterString);
    textView.text = filterString;
}

/**
 *  正则过滤表情
 */
- (NSString *)disableEmoji:(NSString *)text
{
    if (!text.length) return text;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^\\u0020-\\u007E\\u00A0-\\u00BE\\u2E80-\\uA4CF\\uF900-\\uFAFF\\uFE30-\\uFE4F\\uFF00-\\uFFEF\\u0080-\\u009F\\u2000-\\u201f\r\n]" options:NSRegularExpressionCaseInsensitive error:nil];
    NSString *modifiedString = [regex stringByReplacingMatchesInString:text
                                                               options:0
                                                                 range:NSMakeRange(0, [text length])
                                                          withTemplate:@""];
    return modifiedString;
}

办法二:

**注意: ** 这里在你把转码后的操作发给服务器后, 需要做的一个额外操作就是, 你再从服务器去回来显示时, 需要反转一下之前的编码才能正常显示出表情符号, 否则就是一堆乱码, 如: 123456%F0%9F%98%83%E2%98%BA%F0%9F%98%9A%F0%9F%98%99%F0%9F%99%8412 ;

  1. 把含有表情的字符串进行编码后再发送给服务端:
NSString *inputText = [self.editTextView.text stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)urlString, (CFStringRef)@"!$&'()*+,-./:;=?@_~%#[]", NULL, kCFStringEncodingUTF8);
  1. 对从服务器获取回来含有表情的字符串进行反转后显示在页面上:
NSString *showText = [serverString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  1. 把编码的字符串反转之后的显示效果图:
反转后显示的效果.png

办法三:

NSData *data =[inputText dataUsingEncoding:NSUTF8StringEncoding];

不过这种办法比较麻烦, 不建议使用这种方法;

上一篇下一篇

猜你喜欢

热点阅读