在做项目的时候,textField能够输入表情,但是iOS的表情是占两个字符的,再计算字符串长度的时候就和想象的不一样了,所以用了次方法会将表情的长度转成1,最后得到的字符串的长度就是能看到的实际的长度。

方法中用到了iOS的表情编码,看不懂具体是什么,但是知道那些就是表情的编码,根据这个编码就能够找到具体是那个表情了。

此方法参考自:http://blog.csdn.net/liujinlongxa/article/details/44207003

- (NSInteger)getStringLengthWithString:(NSString *)string
{
    __block NSInteger stringLength = 0;
    
    [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)
                                        {
                                            stringLength += 1;
                                        }
                                        else
                                        {
                                            stringLength += 1;
                                        }
                                    }
                                    else
                                    {
                                        stringLength += 1;
                                    }
                                } else if (substring.length > 1)
                                {
                                    const unichar ls = [substring characterAtIndex:1];
                                    if (ls == 0x20e3)
                                    {
                                        stringLength += 1;
                                    }
                                    else
                                    {
                                        stringLength += 1;
                                    }
                                } else {
                                    if (0x2100 <= hs && hs <= 0x27ff)
                                    {
                                        stringLength += 1;
                                    }
                                    else if (0x2B05 <= hs && hs <= 0x2b07)
                                    {
                                        stringLength += 1;
                                    }
                                    else if (0x2934 <= hs && hs <= 0x2935)
                                    {
                                        stringLength += 1;
                                    }
                                    else if (0x3297 <= hs && hs <= 0x3299)
                                    {
                                        stringLength += 1;
                                    }
                                    else if (hs == 0xa9 || hs == 0xae || hs == 0x303d || hs == 0x3030 || hs == 0x2b55 || hs == 0x2b1c || hs == 0x2b1b || hs == 0x2b50)
                                    {
                                        stringLength += 1;
                                    }
                                    else
                                    {
                                        stringLength += 1;
                                    }
                                }
    }];
    
    return stringLength;
}

附文:

iOS表情编码集:

  • NSString *s = @"This is a smiley /ue415 face";
  • testFace.text = s;
  • 上面的/ue415就是表情编码。更多的表情如下:
  • /ue415 /ue056 /ue057 /ue414 /ue405 /ue106 /ue418
  • /ue417 /ue40d /ue40a /ue404 /ue105 /ue409 /ue40e
  • /ue402 /ue108 /ue403 /ue058 /ue407 /ue401 /ue40f
  • /ue40b /ue406 /ue413 /ue411 /ue412 /ue410 /ue107
  • /ue059 /ue416 /ue408 /ue40c /ue11a /ue10c /ue32c
  • /ue32a /ue32d /ue328 /ue32b /ue022 /ue023 /ue327
  • /ue329 /ue32e /ue32f /ue335 /ue334 /ue021 /ue337
  • /ue020 /ue336 /ue13c /ue330 /ue331 /ue326 /ue03e
  • /ue11d /ue05a /ue00e /ue421 /ue420 /ue00d /ue010
  • /ue011 /ue41e /ue012 /ue422 /ue22e /ue22f /ue231
  • /ue230 /ue427 /ue41d /ue00f /ue41f /ue14c /ue201
  • /ue115 /ue428 /ue51f /ue429 /ue424 /ue423 /ue253
  • /ue426 /ue111 /ue425 /ue31e /ue31f /ue31d /ue001
  • /ue002 /ue005 /ue004 /ue51a /ue519 /ue518 /ue515
  • /ue516 /ue517 /ue51b /ue152 /ue04e /ue51c /ue51e
  • /ue11c /ue536 /ue003 /ue41c /ue41b /ue419 /ue41a
  • /ue04a /ue04b /ue049 /ue048 /ue04c /ue13d /ue443
  • /ue43e /ue04f /ue052 /ue053 /ue524 /ue52c /ue52a
  • /ue531 /ue050 /ue527 /ue051 /ue10b /ue52b /ue52f
  • /ue528 /ue01a /ue134 /ue530 /ue529 /ue526 /ue52d
  • /ue521 /ue523 /ue52e /ue055 /ue525 /ue10a /ue109
  • /ue522 /ue019 /ue054 /ue520 /ue306 /ue030 /ue304
  • /ue110 /ue032 /ue305 /ue303 /ue118 /ue447 /ue119
  • /ue307 /ue308 /ue444 /ue441
  • /ue436 /ue437 /ue438 /ue43a /ue439 /ue43b /ue117
  • /ue440 /ue442 /ue446 /ue445 /ue11b /ue448 /ue033
  • /ue112 /ue325 /ue312 /ue310 /ue126 /ue127 /ue008
  • /ue03d /ue00c /ue12a /ue00a /ue00b /ue009 /ue316
  • /ue129 /ue141 /ue142 /ue317 /ue128 /ue14b /ue211
  • /ue114 /ue145 /ue144 /ue03f /ue313 /ue116 /ue10f
  • /ue104 /ue103 /ue101 /ue102 /ue13f /ue140 /ue11f
  • /ue12f /ue031 /ue30e /ue311 /ue113 /ue30f /ue13b
  • /ue42b /ue42a /ue018 /ue016 /ue015 /ue014 /ue42c
  • /ue42d /ue017 /ue013 /ue20e /ue20c /ue20f /ue20d
  • /ue131 /ue12b /ue130 /ue12d /ue324 /ue301 /ue148
  • /ue502 /ue03c /ue30a /ue042 /ue040 /ue041 /ue12c
  • /ue007 /ue31a /ue13e /ue31b /ue006 /ue302 /ue319
  • /ue321 /ue322 /ue314 /ue503 /ue10e /ue318 /ue43c
  • /ue11e /ue323 /ue31c /ue034 /ue035 /ue045 /ue338
  • /ue047 /ue30c /ue044 /ue30b /ue043 /ue120 /ue33b
  • /ue33f /ue341 /ue34c /ue344 /ue342 /ue33d /ue33e
  • /ue340 /ue34d /ue339 /ue147 /ue343 /ue33c /ue33a
  • /ue43f /ue34b /ue046 /ue345 /ue346 /ue348 /ue347
  • /ue34a /ue349
  • /ue036 /ue157 /ue038 /ue153 /ue155 /ue14d /ue156
  • /ue501 /ue158 /ue43d /ue037 /ue504 /ue44a /ue146
  • /ue50a /ue505 /ue506 /ue122 /ue508 /ue509 /ue03b
  • /ue04d /ue449 /ue44b /ue51d /ue44c /ue124 /ue121
  • /ue433 /ue202 /ue135 /ue01c /ue01d /ue10d /ue136
  • /ue42e /ue01b /ue15a /ue159 /ue432 /ue430 /ue431
  • /ue42f /ue01e /ue039 /ue435 /ue01f /ue125 /ue03a
  • /ue14e /ue252 /ue137 /ue209 /ue154 /ue133 /ue150
  • /ue320 /ue123 /ue132 /ue143 /ue50b /ue514 /ue513
  • /ue50c /ue50d /ue511 /ue50f /ue512 /ue510 /ue50e
  • /ue21c /ue21d /ue21e /ue21f /ue220 /ue221 /ue222
  • /ue223 /ue224 /ue225 /ue210 /ue232 /ue233 /ue235
  • /ue234 /ue236 /ue237 /ue238 /ue239 /ue23b /ue23a
  • /ue23d /ue23c /ue24d /ue212 /ue24c /ue213 /ue214
  • /ue507 /ue203 /ue20b /ue22a /ue22b /ue226 /ue227
  • /ue22c /ue22d /ue215 /ue216 /ue217 /ue218 /ue228
  • /ue151 /ue138 /ue139 /ue13a /ue208 /ue14f /ue20a
  • /ue434 /ue309 /ue315 /ue30d /ue207 /ue229 /ue206
  • /ue205 /ue204 /ue12e /ue250 /ue251 /ue14a /ue149
  • /ue23f /ue240 /ue241 /ue242 /ue243 /ue244 /ue245
  • /ue246 /ue247 /ue248 /ue249 /ue24a /ue24b /ue23e
  • /ue532 /ue533 /ue534 /ue535 /ue21a /ue219 /ue21b
  • /ue02f /ue024 /ue025 /ue026 /ue027 /ue028 /ue029
  • /ue02a /ue02b /ue02c /ue02d /ue02e /ue332 /ue333
  • /ue24e /ue24f /ue537

iOS小知识:计算字符串长度(如果有表情,表情的长度为1)的更多相关文章

  1. iOS小知识:使UIButton中的图片和文字实现左对齐

    UIButton setImage 和 setTitle之后,默认的 image和title 对齐方式是居中, 由于 title 长度不固定,所以如果要几个这样有image有title的按钮纵向排列对 ...

  2. iOS 小知识

    iOS 各版本: http://www.pig66.com/2018/145_1021/17357553.html

  3. IOS小知识纪录

    1.scrollView缩放 #import "ViewController.h" @interface ViewController () <UIScrollViewDel ...

  4. iOS 小知识-tips

    --->1<--- arc的项目中使用非arc代码,则添加-fno-objc-arc: 非arc项目中使用arc代码,则添加-fobjc-arc. --->2<--- 实用的类 ...

  5. iOS 小知识 - #if , #ifdef , #ifndef.

    Q : 在项目的 .h 文件中, #ifndef XXX_h #define XXX_h //程序段1 #endif  /* XXX_h */ 的作用? A : 如果 XXX.h 不存在,就引入 XX ...

  6. ios 计算字符串长度<转>

    - (int)textLength:(NSString *)text//计算字符串长度 {     float number = 0.0;     for (int index = 0; index ...

  7. C# 计算字符串在控制台中的显示长度

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  8. C#计算字符串长度,汉字算两个字符

    在C#中的字符串类String中,有个Length属性表示字符串的长度,但该字段返回的是字符的个数,如果字符串中含有中文字符的话,一个汉字占用两个字符的长度,此时获取的长度就不够精确,当然也看具体业务 ...

  9. NET MVC全局异常处理(一) 【转载】网站遭遇DDoS攻击怎么办 使用 HttpRequester 更方便的发起 HTTP 请求 C#文件流。 Url的Base64编码以及解码 C#计算字符串长度,汉字算两个字符 2019周笔记(2.18-2.23) Mysql语句中当前时间不能直接使用C#中的Date.Now传输 Mysql中Count函数的正确使用

    NET MVC全局异常处理(一)   目录 .NET MVC全局异常处理 IIS配置 静态错误页配置 .NET错误页配置 程序设置 全局异常配置 .NET MVC全局异常处理 一直知道有.NET有相关 ...

随机推荐

  1. python爬虫学习(6) —— 神器 Requests

    Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 H ...

  2. 利用线上数据验证系统 Gor

    Web 应用性能和压力测试工具 Gor - 运维生存时间 http://hao.jobbole.com/gorhttp/ 要使用线上引流到测试环境的作用,需要做到以下几点: 1.新搭建一套测试环境,连 ...

  3. Linux Posix线程条件变量

    生产者消费者模型 .多个线程操作全局变量n,需要做成临界区(要加锁--线程锁或者信号量) .调用函数pthread_cond_wait(&g_cond,&g_mutex)让这个线程锁在 ...

  4. [LeetCode] Product of Array Except Self 除本身之外的数组之积

    Given an array of n integers where n > 1, nums, return an array output such that output[i] is equ ...

  5. 基于modelsim-SE的简单仿真流程—下

    基于modelsim-SE的简单仿真流程—下 编译 在 WorkSpace 窗口的 counter_tst.v上点击右键,如果选择Compile selected 则编译选中的文件,Compile A ...

  6. Canvas电子签名和游戏化

    今天一天的时间都在做包团报价的无流程原型设计,一方面参考了其他系统,一方面整理先在系统中不合理的部分,规范了报价元素的分类.梳理了意向需求,其实原来粗略的放了一个模板进去是听不靠谱的.客户的要求-&g ...

  7. zabbix利用api批量添加item,并且批量配置添加graph

    关于zabbix的API见,zabbixAPI 1item批量添加 我是根据我这边的具体情况来做的,本来想在模板里面添加item,但是看了看API不支持,只是支持在host里面添加,所以我先在一个ho ...

  8. php 2038年问题

    在mysql中存放日期时可以存放整数 (int),  而int可以存放的数据最大为4294967295(无符号), 而php最大为2147483647, 要显示一个大于2038年日期,该如何处理 ? ...

  9. MyBatis 延迟加载,一级缓存,二级缓存设置

    什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息 ...

  10. Gc.Db之循序渐进

    距离上次写Gc.Db框架已经有一段时间了,最近默默对框架代码已经做了不少优化和功能,且已经提交至nuget,大家如果想使用此框架,可以通过nuget搜索:Gc.Db进行下载和安装包. 本篇文章主要是介 ...