iOS emoji表情转码 或者判断

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

先定义一个UITextView 并设置代理
设定一个宏定义,用来判断emoji
<pre>

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

</pre>
下面写代理方法实现的内容
<pre>

  • (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 去除前面六个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;
    }
    </pre>

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 如果项目中有评论或者信息恢复的地方,往往会用到emoji,有时候如后台不支持emoji,就会显示乱码错误,我们可以...
    々莫等闲々阅读 4,034评论 1 1
  • https://my.oschina.net/wingyiu/blog/153357 MYSQL 5.5 之前, ...
    爱蛇阅读 2,773评论 0 0
  • 心情不好的时候,总想写点东西,写点什么呢?脑子里却什么语言都想不起来!是想说我太可怜了,还是说我的婚姻太可怜?一切...
    贝儿和荷儿阅读 151评论 0 0
  • 没有谁永远都是第一名,人都有瓶颈期。热爱的东西,也可能会因为自己做得不够好,完成得不够完美,附加事情配合得不够完善...
    小小风车阅读 174评论 0 0
  • 本期节目由简书、喜马拉雅联合制作 首播:2015年6月13日 主题:《情深不寿》 主播:赖秋雨 作者:玮夫雯斯基 ...
    简书阅读 838评论 0 4