不明確的unicode字符
起因:一個Demo源碼,也不知道是用什么編輯器編的,中文注釋非常全面。就打算原來的基礎上改改就用,特別是里面大量接口、類的定義,真沒必要重寫。但是在VS Code里面打開,出現“本文檔包含許多不明確的unicode字符 禁用不明確的突出顯示”的提示。這個提示的意思是不明確的字符太多,已經禁用了不明確的突出顯示的功能。的確,到處都突出顯示的話,也就體現不出突出了。程序能正確運行,問題出現在注釋中,關掉這個提示也很容易,但問題是不明確的字符是哪些呢,為什么要突出顯示呢?
分析:網上查這個提示的含義,說得也很清楚,就是有的unicode字符,跟ascii碼很像,用來寫代碼的話當然是不正確的,并且肉眼難以看出來,所以平常就會突出顯示,以防用錯字符。雖然實際情況是這些字符只在注釋中出現,不會影響代碼運行,但仍然很好奇,究竟有哪些不明確的字符。但這個問題上網查了半天也沒有找到答案。不過,因為手上就有一個包含很多不明確字符的文件,應該可以篩選出來。
解決辦法:比較笨,但也不算麻煩。就是把明確的去掉,不明確的就在剩余的字符中,應該不會太多。首先,ascii和漢字應該是明確的,用正則表達式查找替換掉。[\u0000-\u00ff\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF],剩下的果然是一些符號,其中好些看上去確實像ascii字符,但顯然不可能是,因為已經都替換掉了。但由于剩余的不明確字符數量還是很多,仍然沒有什么突出顯示,只有一個是:u+3000,再來,這次用(.)(?=.*\1)來去重,結果就只剩下:
《》-℉“”–…~℃;、():。,
其中好幾個明顯與ascii不同,但有幾個就得看是用什么字體顯示的了。把其中的《》℉℃、。這幾個明顯的漢字字符刪掉,打開原文件再來一次正則表達式替換,OK!這個煩人的提示就不見了。
這幾個不明確的字符unicode分別是: 3000、2013、 201C、 201D、 2026、 FF08、 FF09、FF0C、FF0D、 FF1A、FF1B、 FF5E。可以看到,其中:FF00——FFFF,其實就是雙字節碼里面高字節為全1的,可以理解為簡單的ASCII擴展,在UNICODE中屬于“半型及全型形式 (Halfwidth and Fullwidth Form) ”這一區域,再次打開原文件,用[\xff00-\xffff]替換,直接提示就消失了。說明主要就是這些字符引起的。以后如果不想看到這煩人的提示,這么簡單的處理就可以了,注釋里面這些符號少了應該不影響閱讀,穩妥的辦法當然還得一一替換。不過現在可以知道,重點是這一區的字符,就好解決得多。當然,不明確的字符應該也會有其他的,不過,本文的辦法應該同樣能夠把其他的也找出來,如果手里面有類似的文件的話。