zoukankan      html  css  js  c++  java
  • [BUG随想录] 看不见的分隔符: Zero-width space

    今天在调试一段代码的时候,有一个输入不能为空的库函数抛出了异常(为空就会抛出异常,就是这么傲娇)。自己暗骂了自己一番,怎么这么大意,于是追溯源头,开始寻找输入控制的地方。但是当我找到时我惊呆了,我明明写了代码来控制输入不为空的啊!

    if(!string.IsNullOrWhiteSpace(input))
        Function(input);
    

    我一度怀疑是我眼花了,于是回到案发现场,逐步调试。看到案发现场的那一刻我又吃了一惊,这玩意,你说不为空,真的不为空吗...

    我看着这个奇异的符号,心中顿时生出了无数怨念,难道它的长度还能不是0?借助VS,我们来看看它的属性:

    还真的是1...我倒要看看你究竟是何方神圣,于是我想到了ToArray函数,看看它能不能帮我抓出真凶。

    看看我们捕捉到了什么? 经过一番查找,原来这货是U+200B,它还有个学名,叫做:Zero Width Space。它经常出现于各大HTML网页中,是一种看不见的分隔符。

    但是要注意在C#中,我们使用string的判断为空的方法是无法识别它的。那么如何规避它的影响呢? 其实只需要在预处理文本的时候加上一句:

    text = text.Replace("u200B","");
    

    这样就可以去掉text文本中的这种看不见的分隔符了。注意,U+200B有可能连续多个一起出现,所以尽量不要通过判断长度和字符来寻找和去除它。

  • 相关阅读:
    嵌入级联分类器
    AdaBoost 和 Real Adaboost 总结
    二分图匹配--匈牙利算法
    更新说明
    使用Visual Studio 2015 Community 开发windows服务
    C#字符串的不变性
    Windows 7 IIS HTTP 错误 500.21 – Internal Server Error 解决方法
    asp.net的请求管道事件
    Http请求过程
    css简单学习属性2---背景图片
  • 原文地址:https://www.cnblogs.com/SivilTaram/p/5767450.html
Copyright © 2011-2022 走看看