iOS小知识:计算字符串长度(如果有表情,表情的长度为1)

在做项目的时候,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
时间: 2024-08-27 01:13:32

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

iOS 小知识-tips

--->1<--- arc的项目中使用非arc代码,则添加-fno-objc-arc: 非arc项目中使用arc代码,则添加-fobjc-arc. --->2<--- 实用的类 NSKeyedArchiver [UIScreen mainScreen] [UIDevice currentDevice] [UIFont familyNames] [UIApplication sharedApplication] [NSUserDefaults standardUserDefaults

ios 小知识仅供参考

//计算字符串中单词的个数 1 + (int)countWords:(NSString*)s 2 { 3 int i,n=[s length],l=0,a=0,b=0; 4 unichar c; 5 for(i=0;i<n;i++){ 6 c=[s characterAtIndex:i]; 7 if(isblank(c)) 8 { 9 b++; 10 }else if(isascii(c)) 11 { 12 a++; 13 }else 14 { 15 l++; 16 } 17 } 18 if(a

iOS中动态计算字符串的长度

在iOS7以下动态算一个string的size的时候可以用sizeWithFont - (CGSize)sizeWithFont:(UIFont *)font 具体应用: CGSize statuseStrSize = [lcsstring sizeWithFont:string.font]; 或者 - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode

[Python][小知识] Python字符串前 加 u、r、b 的含义

1.字符串前加 u 例:u"我是含有中文字符组成的字符串." 作用:后面字符串以 Unicode 格式 进行编码,一般用在中文字符串前面,防止因为源码储存格式问题,导致再次使用时出现乱码. PS:不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行.一般英文字符在使用各种编码下,,基本都可以正常解析, 所以一般不带u.但是中文有事会出现问题,就要想以前在学校上机敲代码时候一样,优盘一插,源码一拷贝,一打开,中文部分全成框框乱码了...贼尴尬... 2.字符串前加 r 例:r&

IOS小知识纪录

1.scrollView缩放 #import "ViewController.h" @interface ViewController () <UIScrollViewDelegate> @property (weak, nonatomic) IBOutlet UIScrollView *scrollView; @property (weak, nonatomic) IBOutlet UIImageView *mView; @end @implementation View

iOS 根据字符串样式、字符串长度计算字符串所占大小

通过Category为NSString添加方法: 1. 根据字符串样式.字符串长度计算字符串所占大小 /** *  @param font     字符串样式 *  @param maxWidth 指定字符串长度 */- (CGSize)sizeWithFont:(UIFont *)font maxWidth:(CGFloat)maxWidth { // 获取文字样式 NSMutableDictionary *attrs = [NSMutableDictionary dictionary]; a

ios开发小知识2

http://blog.sina.com.cn/s/blog_66450b500102vadq.html http://www.cnblogs.com/lovesmile/archive/2012/06/27/2565569.html ios开发小知识2(转自cc) 退回输入键盘  - (BOOL)textFieldShouldReturn:(id)textField{    [textField resignFirstResponder];} CGRectCGRect frame = CGRe

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

C# 计算字符串在控制台中的显示长度? 警告 您当前查看的页面是未经授权的转载! 如果当前版本排版错误,请前往查看最新版本:http://www.cnblogs.com/qin-nz/p/csharp-calculate-string-display-length.html 提示 更新时间:2016年01月09日. 本作品由勤奋的小孩创作,采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可. 欢迎转载,但任何转载必须保留完整文章,在显要地方显示署名以及原文链接( http

【JavaScript】计算字符串的长度

定义: functionGetChineseCount(str) { varchinieseCount=0; varbadChar="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; badChar+="abcdefghijklmnopqrstuvwxyz"; badChar+="0123456789"; badChar+=""+" ";//半角与全角空格 badChar+="`[emai