美文网首页生产力
unicode码\u202c\u202d

unicode码\u202c\u202d

作者: 是我拉叔 | 来源:发表于2018-08-14 17:28 被阅读996次

    公司新上线的iOS APP账号注册是手机号码,前段时间有客户反应登录不上,相同的账号反复测试都能登录。昨天登录别人的账号时候直接从iPhone通讯录里复制粘贴了手机号码,登录失败,手动输入,登录成功。

    一定是复制粘贴这里出问题了,打印log,账号密码看不出异常,NSString转换NSURL结果是null,怀疑手机号码复制的时候是Unicode引起的故障。

    debug模式发现手机号 String.lengh :13,数来数去手机号明明是11位数啊,再往下一看,问题找到了,手机号头尾多了奇怪的东西。

    搜了一些,网上找到有人遇到同样的问题,看这里,并提供了解决办法如下:

    1.既然有这两个奇怪的东西,那就把这个去掉。首先知道这两个东西是啥?(找了资料说这个属于不显示的unicode码所以可以看到界面上显示时正常的但位数就不对)。

    2.如何去掉

    a.字符替换(发现@"\\p{Cf}"属于不显示的uicode的一个总称:\p{Cf} or \p{Format}: invisible formatting indicator.)

    [str stringByReplacingOccurrencesOfString:@"\\p{Cf}" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, str.length)];

    b.过滤(运用类似正则的东西)

    NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];    NSCharacterSet *specCharacterSet = [characterSet invertedSet];    NSArray *strArr = [str componentsSeparatedByCharactersInSet:specCharacterSet];    return [strArr componentsJoinedByString:@""];

    总结分析:

    上面两个方法都可以解决上面的问题,但说下方法a就是仅仅针对不可见的unicode进行替换。

    方法b的话只会显示[0-9]之间的数字,其它的字符也会过滤掉。

    上面两个方法,我比较推崇a方法因为,它没有副作用,仅仅是去掉我们想去掉的。


    参考: 

    https://blog.csdn.net/lnking1992/article/details/80367924

    http://www.fileformat.info/info/unicode/char/202c/index.htm

    http://www.fileformat.info/info/unicode/char/202d/index.htm

    相关文章

      网友评论

        本文标题:unicode码\u202c\u202d

        本文链接:https://www.haomeiwen.com/subject/stivbftx.html