[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有可能連續多個一起出現,所以盡量不要通過判斷長度和字符來尋找和去除它。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM