如果项目中有评论或者信息恢复的地方,往往会用到emoji,有时候如后台不支持emoji,就会显示乱码错误,我们可以把emoji转成unicode编码或者utf8编码格式传给服务器。当然如果后台服务器接收的时候能做好判断识别最好,我们这边后台是支持的,我仅记录一下方法,以备不时之需。

先定义一个UITextView 并设置代理

设定一个宏定义,用来判断emoji

  1. #define MULITTHREEBYTEUTF16TOUNICODE(x,y) (((((x ^ 0xD800) << 2) | ((y ^ 0xDC00) >> 8)) << 8) | ((y ^ 0xDC00) & 0xFF)) + 0x10000

下面写代理方法实现的内容

  1. - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
  2. {
  3. NSString *hexstr = @"";
  4.  
  5. for (int i=;i< [text length];i++)
  6. {
  7. hexstr = [hexstr stringByAppendingFormat:@"%@",[NSString stringWithFormat:@"0x%1X ",[text characterAtIndex:i]]];
  8. }
  9. NSLog(@"UTF16 [%@]",hexstr);
  10.  
  11. hexstr = @"";
  12.  
  13. long slen = strlen([text UTF8String]);
  14.  
  15. for (int i = ; i < slen; i++)
  16. {
  17. //fffffff0 去除前面六个F & 0xFF
  18. hexstr = [hexstr stringByAppendingFormat:@"%@",[NSString stringWithFormat:@"0x%X ",[text UTF8String][i] & 0xFF ]];
  19. }
  20. NSLog(@"UTF8 [%@]",hexstr);
  21.  
  22. hexstr = @"";
  23.  
  24. if ([text length] >= ) {
  25.  
  26. for (int i = ; i < [text length] / && ([text length] % == ) ; i++)
  27. {
  28. // three bytes
  29. if (([text characterAtIndex:i*] & 0xFF00) == ) {
  30. hexstr = [hexstr stringByAppendingFormat:@"Ox%1X 0x%1X",[text characterAtIndex:i*],[text characterAtIndex:i*+]];
  31. }
  32. else
  33. {// four bytes
  34. hexstr = [hexstr stringByAppendingFormat:@"U+%1X ",MULITTHREEBYTEUTF16TOUNICODE([text characterAtIndex:i*],[text characterAtIndex:i*+])];
  35. }
  36.  
  37. }
  38. NSLog(@"(unicode) [%@]",hexstr);
  39. }
  40. else
  41. {
  42. NSLog(@"(unicode) U+%1X",[text characterAtIndex:]);
  43. }
  44.  
  45. return YES;
  46. }

在输入的时候,会自动把输入内容转成相应的格式。

如果在有些地方不需要输入emoji表情,可以做相关限制。

我这边用到的是,如果用户输入emoji表情的时候,会给出提示

  1. //是否含有表情
  2. - (BOOL)stringContainsEmoji:(NSString *)string
  3. {
  4. __block BOOL returnValue = NO;
  5.  
  6. [string enumerateSubstringsInRange:NSMakeRange(, [string length])
  7. options:NSStringEnumerationByComposedCharacterSequences
  8. usingBlock:^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
  9. const unichar hs = [substring characterAtIndex:];
  10. if (0xd800 <= hs && hs <= 0xdbff) {
  11. if (substring.length > ) {
  12. const unichar ls = [substring characterAtIndex:];
  13. const int uc = ((hs - 0xd800) * 0x400) + (ls - 0xdc00) + 0x10000;
  14. if (0x1d000 <= uc && uc <= 0x1f77f) {
  15. returnValue = YES;
  16. }
  17. }
  18. } else if (substring.length > ) {
  19. const unichar ls = [substring characterAtIndex:];
  20. if (ls == 0x20e3) {
  21. returnValue = YES;
  22. }
  23. } else {
  24. if (0x2100 <= hs && hs <= 0x27ff) {
  25. returnValue = YES;
  26. } else if (0x2B05 <= hs && hs <= 0x2b07) {
  27. returnValue = YES;
  28. } else if (0x2934 <= hs && hs <= 0x2935) {
  29. returnValue = YES;
  30. } else if (0x3297 <= hs && hs <= 0x3299) {
  31. returnValue = YES;
  32. } else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50) {
  33. returnValue = YES;
  34. }
  35. }
  36. }];
  37.  
  38. return returnValue;
  39. }

通过调用该方法,如果返回的是YES则输入内容含有emoji,反之。

iOS emoji表情转码 或者判断的更多相关文章

  1. IOS Emoji表情

    IOS Emoji 前言:我比较喜欢有趣的东西,有一些有趣的小东西,可能不是多么多么牛逼,也可能不需要多高深的技巧,也不会为其他什么强大的功能而服务,但是有时候将很多有趣的小东西组合起来运用,比如在你 ...

  2. iOS  Emoji表情编码/解码

    之前做弹幕的时候 遇到的表情编码解码问题 表情编码一般是使用unicode编码 ,编码之后的格式 \ud83d\ude18\ud83d\ude18world\u4e16\u754chaha\ud83d ...

  3. PHP 去除iphone,ios,emoji表情

    public static function removeEmoji($text) { $clean_text = ""; // Match Emoticons $regexEmo ...

  4. iOS Emoji

    iOS Emoji 前言:我比较喜欢有趣的东西,有一些有趣的小东西,可能不是多么多么牛逼,也可能不需要多高深的技巧,也不会为其他什么强大的功能而服务,但是有时候将很多有趣的小东西组合起来运用,比如在你 ...

  5. Emoji表情图标在iOS与PHP之间通信及MySQL存储

    在某个 iOS 项目中,需要一个服务器来保存一些用户数据,例如用户信息.评论等,我们的服务器端使用了 PHP+MySQL 的搭配.在测试过程中我们发现,用户在 iOS 端里输入了 Emoji 表情提交 ...

  6. iOS 自定义emoji表情键盘

    之前走了很多弯路,包括自己定以emoji表情,自己创建view类去处理图文混排 ,当把这些焦头烂额的东西处理完了才发现 ,其实系统自带键盘是如此的方便,iOS 系统自带的表情在view,textfie ...

  7. 判断字符串中是否包含Emoji表情代码

    判断字符串中是否包含Emoji表情代码: + (BOOL)stringContainsEmoji:(NSString *)string { __block BOOL returnValue = NO; ...

  8. 判断EditText输入的字符串中是否包含有emoji表情

    我们在实际的开发中经常需要用到EditText 但是有一个不好的地方就是我们在前端用EditText输入了带有emoji表情的字符串之后 服务器是无法识别的,这就需要我们前端根据需求来决定表情的去留, ...

  9. mysql支持IOS的Emoji表情

    原因: UTF-8编码有可能是两个.三个.四个字节.Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去. 解决办法: 将Mysql的编码从utf8转换成utf8mb4 ...

随机推荐

  1. win7和Ubuntu双系统折腾记

    哎,最近老是写些没涵养的博客.哥们问我怎么不分享点cv的论文思路,或者搞点深度学习调参的经验.因为真正跑深度学习搞 计算机视觉的时候,时间悄悄过去了,只有环境出Bug了,才是我最难受的时候,每一次搞好 ...

  2. 如何使用SQLPLUS分析SQL语句(查询执行计划跟踪)

    方法一:autotrace 1,  connect sys/密码 as sysdba,在sys用户下运行$ORACLE_HOME/sqlplus/admin/plustrce.sql这段sql的实际内 ...

  3. WinForm中WebBrowser的使用

    最近由于工作需要,研究了下Winform的WebBrowser控件,在这里给大家分享下. 1.WebBrowser导航 WebBrowser在进行导航的时候需要用到Navigate(string ur ...

  4. iOS(本地通知与远程通知)

    iOS 推送通知有两种:本地推送.远程推送. 本地推送 :  在不需要联网的情况下,由APP发出推送,常用于某一时刻的通知,如闹钟.本地通送有局限性在于当APP处于后台或者退出时就无法发出通知. 远程 ...

  5. jquery指index

    $(selector).index(element) 获得元素相对于选择器的 index 位置.<ul>    <li><a href="#nogo" ...

  6. AFNetworking图片缓存问题

    AFNetworking网络库已经提供了很好的图片缓存机制,效率是比较高的,但是我发现没有直接提供清除缓存的功能,可项目通常都需要添加 清除功能的功能,因此,在这里我以UIImageView+AFNe ...

  7. LeetCode OJ 116. Populating Next Right Pointers in Each Node

    Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *nex ...

  8. 你不知道的函数节流,提高你的JS性能!

    浏览器的DOM计算处理非常耗费CPU时间,霸占内存,这对我们的开发来说是非常不友好的,,比如IE浏览器的onresize事件就可能在用户稍微拖动一下窗口时计算上千次,甚至更高频率直接让浏览器崩溃... ...

  9. DUILIB 实现微信气泡聊天效果

    最近由于项目原因,需要做一个产品内嵌的IM聊天系统.而且要象微信类似的效果:界面也要比较炫: 开始考虑用MFC,但MFC的控件自绘很麻烦,后来又考虑QT,倒是使用控件使用方便,但QT库太大,所以也放弃 ...

  10. 什么是IO流 \ 以及文件输入输出

    一.IO流的分类: 流按照操作数据的类型分为两种:字节流:字符流. 1.什么是字节流:读取的是文件的二进制数据,不会对二进制做处理,不会解析成看得懂的数据. 2.什么是字符流:读取的是文件的二进制数据 ...