前端小白歷險記(二)原來是你騰訊搞的鬼!
書接前文(??https://bbs.huaweicloud.com/blogs/181124? )
在 @胡琦 大大的幫助下,張小白終于學會了用VsCode的hexdump插件查看十六進制原文,從而分析出了: 鏈接失效是因為 abc 第一個a字母和href之間的空格,其實是由兩個字節構成,0xC2 0xA0(以下簡稱C2?A0)。
根據張小白的杠精性尿性,光光知道“C2 A0 !=== 20,從而導致斜杠丟失”這個事實是不能滿足張小白的。張小白想知道,自己何以淪落至此?所以C2 A0就變成了張小白心中的夢魘,直到他在度娘盤到了以下內容:
看來這不是一個特例,而是一個普遍的問題。無論是HTML,還是Java,Python,都會遇到類似的問題。甚至這個C2 A0幾乎無法通過trim去掉空格,導致原本你想去掉空格的時候,假空格還堅挺地站立在那里。C2 A0叫做 NO-BREAK SPACE。中文翻譯過來就是:不間斷空格。它會表現為一個半角空格,這跟ASCII碼為0x20的空格在展示上完全一樣,這造成在VsCode編輯器上就有很大的迷惑性。網上因為這事兒中招的人還特別多。
那么,它到底是如何產生的?張小白一直在想如何重現這個問題。當然,所謂的重現并不是說,在上次錯誤HTML文檔的基礎上做Ctrl-C和Ctrl-V,而是看看到底啥情況會出現C2?A0。
直接在VsCode中反復轉換好像不大容易試出來,張小白又展開了進一步的搜索,搜索工具除了度娘之外,使用了bing, 360和sogou。(鑒于最近有人因使用科學軟件被抓,張小白也不敢學科學)。
要知道,張小白在上《WEB前端全棧成長計劃》課程的時候,是隨時用?微信做筆記的:要么截圖,要么發一些文字留存。稍后再對這些內容做整理,就可以形成一篇圖文并茂的文字(包括本文的誕生)。
所以,張小白就做了一個很簡單的實驗:在VScode上快速建立一個HTML文件(還記得!+TAB鍵嗎?不會的,學一下!)
我們預覽下:
然后將下面這段代碼貼到微信中去:
如圖所示:
(是的,我可能是發給了我的小號,或者別人的大號,大家都不要猜了)。
然后,我把這段文字,再從微信CTRL-C,CTRL-V回VsCode的HTML文件中。
你看的沒錯,貼回來就是這個樣子,后面好像多了個空格。刪掉那個空格,讓<>不再飄紅:
好像沒問題吧?
預覽一下:
終于重現故障!大快小白心!
拿出Hexdump大旗。。。
從圖中可見,第二個的空格已經變成了 C2 A0.
看來,果然是騰訊的微信在使用ctrl-C,ctrl-V往VsCode編輯器拷貝東西的時候,微信會在你拷貝的時候加點“料”。(是防拷貝政策嗎?)
這個時候應該怎么辦?
試試使用記事本big法:先將微信內容Ctrl-C后,粘貼到記事本上,然后再Ctrl-C記事本上的內容,再Ctrl-V到Vscode里面。
以前一般有格式問題,比如字體字號之類的,張小白只要按照這個辦法,相應的格式就會消失。那么,這種辦法有效嗎?
我們再預覽下:
一點用都沒有。即便是記事本,也會將C2 A0原封不動的拷貝過去。還是無杠青年。
當然有一種辦法,就是你貼到記事本的時候,將空格刪掉再重打一遍,不過這個跟你貼到VsCode后刪掉空格再重打一遍空格又有何區別呢?
看來使用快捷鍵或工具來轉換C2 A0的方法似乎沒用,張小白又找了一些代碼轉換的方法,如:
Python代碼轉換法:代碼convert.py
#?-*-?coding:utf-8?-*- import?os import?sys import?io reload(sys) sys.setdefaultencoding('utf-8') #打開源文件,讀取內容 org_file=open("C:\Users\zhang\Desktop\space.html","r") org_str=org_file.read() #替換為空格 dest_str=org_str.replace(u"\xa0",?u'\x20') #注意,此處"\xa0"不能輸入為"\xc2\xa0"! #print(dest_str) #打開目的文件,寫入替換后的內容 dest_file=io.open("C:\Users\zhang\Desktop\space-converted.html","w",encoding="utf-8") dest_file.write(dest_str)
在VsCode中執行:
打開生成后的代碼:space-converted.html?使用hexdump查看:
瀏覽器預覽都可以了:
參考文件:
1:《C2 A0 特殊空格》?https://www.yangdx.com/2019/12/74.html
2:《C2 A0 不可見字符到底是什么?半角非中斷空格》https://blog.csdn.net/qfzhangwei/article/details/89505441
3:《關于替換“c2a0”十六進制字符的方法》https://blog.csdn.net/ampt4027/article/details/101244505
4:《【copy攻城獅日志】斜杠去哪兒了?聊聊前端中進制》https://bbs.huaweicloud.com/forum/thread-66351-1-1.html
HTML5
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。