zoukankan      html  css  js  c++  java
  • 推断汉字正則表達式更严谨方法!

    -------------------------------------------欢迎查看字符编码【专栏】------------------------------------------------------------------
    汉字编码之GBK编码【点击】                                              推断汉字正則表達式更严谨方法【点击
    记事本输入“联通”俩字。关闭再打开乱码 【点击】              iPhone emoji问题牵出的Unicode代理区的思考【点击
    Unicdoe【真正的完整码表】对比表【点击】                      开源projectZipArchive,压缩中文文件名称乱码问题【点击
    base64加密。解密。encode。decode,编码具体解释+实现【点击】 
    网络传输文本。urlEncode和urldecode的iOS实现【点击】 字符编码的奥秘utf-8, Unicode【点击
    --------------------------------------------------------------------------------------------------------------------------------------------------

    一、通常做法

    正如网上流传的。推断中文的正則表達式,绝大部分是这么写的(OC语言):

    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",@"[u4e00-u9fa5]"];
    /*推断是否为中文的正則表達式*/
    if([predicate evaluateWithObject:name]){
       //是中文
    }else{
       //不是中文
    }

    然而上面的正則表達式,逻辑上讲并不严谨:比方一些生僻字的Unicode不在0x4e00-0x9FA5之间<点击查看Unicode总编码>,那么它不能正确识别出来:比方一些四叠字:

    另外另一些偏旁部首。有时候也会作为一个字出现。可是偏旁部首的Unicode相同不在0x4e00-0x9FA5之间,以下分别举例偏旁部首。叠字:


    举几个例:


    下载unicode和utf-8的转换工具。下载

    如四个日的汉字,执行结果确“不是汉字”


    二、原因

    (如果你已经了解unicode的编码规则。和编码实现(utf-8);如果不了解。查看 字符编码的奥秘utf-8, Unicode

    中国71226个汉字。分别分布在Unicode第0个平面。经常使用27973个,第2个平面43253个。而[u4e00-u9fa5]仅仅是代表了大约20901个汉字。剩余的汉字都在第2个平面(这部分可能是生僻字。非常少使用)。

    换句话说:流行的正则仅仅能检測少部分汉字。却能够检測绝大部分经常使用汉字。

    三、更严谨的做法

    所以。在进行正則表達式的时候须要把第二平面的汉字囊括进去。

    更严谨的正則表達式应该是这种:

    NSPredicate* predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@|%@”,@“[u4e00-u9fa5],@“[uDB40DC00-uDB7FDFFF]”];
    //注意这是伪代码,不能执行。非常遗憾眼下正則表達式不支持四个字节unicode的表示。

    为什么是[uDB40DC00-uDB7FDFFF]:这里须要说名一下utf-16代理区:依据unicode的规则,第0平面是直接utf-8表示。第1到第16平面是通过代理区表示的。

    查看这里由iPhone emoji问题牵出的UTF-16编码。UTF-8编码探究——了解utf-8编码和代理区的概念。

  • 相关阅读:
    八款前端开发人员更轻松的实用在线工具
    HTML5中的Web Notification桌面通知(右下角提示)
    老司机程序员用到的各种网站整理
    JAVA变量存储
    关于JAVA中的前期绑定 后期绑定(动态绑定)
    i MySQL 查看约束,添加约束,删除约束
    final static
    MySQL alter语句
    MySQL 权限生效
    MySQL 用户权限管理
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5320211.html
Copyright © 2011-2022 走看看