彎引號與長破折號會弄壞程式碼:一次改成直引號與短横線
彎引號、彎撇號、長短破折號和不換行空格看起來跟一般符號差不多,但電腦會把它們當成不同的字元。程式碼、CSV 檔案、試算表公式和指令列都需要一般符號。貼進去的引號不再是字串的開頭或結尾,參數前的兩個連字號會變成破折號,不換行空格則可能讓程式讀不到整行。貼進程式碼之前,先把字元改成一般符號,再到實際執行的地方測試結果。
修正貼上的文字貼上的文字有斷行免費使用這些字元從哪裡來
文書處理軟體和許多電子郵件程式在你打字時,會把直引號換成彎引號,這就是所謂的智慧型引號。Word 還會把兩個連字號換成破折號。網頁和部分編輯器會插入不換行空格(U+00A0),讓兩個詞留在同一行。這些字元在排版上是正確的,所以才會出現。但只要是程式要讀取的內容,它們就是錯的。
哪裡會出錯
| 位置 | 會發生什麼問題 |
|---|---|
| 原始程式碼 | 彎引號不是字串的界定符號,許多語言在字串以外遇到彎引號或不換行空格就會拒絕執行 |
| Shell 指令 | 打成長破折號的選項符號不是參數標記,程式會把它當成不認識的參數 |
| CSV 檔案 | 解析器用直雙引號包住欄位,彎引號無法保護欄位內的逗號 |
| 試算表公式 | 彎引號會變成文字的一部分,或讓公式回報錯誤 |
| JSON | 彎引號不是有效的字串界定符號,解析器會失敗 |
CSV 檔案遵循的引號規則,請參考 CSV 轉 JSON 指南。
在 fixmint 裡改成直引號
以下三個工具涵蓋常見情況,各自處理不同的字元。
- 彎引號。 開啟修正貼上的文字,勾選轉換彎引號為直引號。它會把彎單引號和撇號改成直單引號,把彎雙引號改成直雙引號,長短破折號則不會動。其他選項,例如修剪每行空白、合併重複空格,預設都是勾選的。
- 破折號、刪節號與特殊空格。 開啟移除隱藏字元,勾選同時把彎引號、長短破折號和 … 轉成一般 ASCII。破折號會變成連字號,刪節號會變成三個點。不換行空格預設會轉成一般空格。標記檢視會顯示每一處的修改位置。
- 單一字元或片語。 開啟尋找與取代,不要勾選正規表示式,在尋找欄輸入要改的字元,在取代欄輸入它的一般符號版本。正規表示式關閉時,尋找欄是純文字比對,所以彎引號只會比對到它自己。
以下是第二個工具套用在一段常見貼上內容上的結果:
| 修改前 | 修改後 |
|---|---|
| “Hello,” she said. | "Hello," she said. |
| It’s done. | It's done. |
| —verbose | -verbose |
最後一列顯示了這個做法的限制。每個破折號都只會變成一個連字號,因此文書處理軟體合併成一個長破折號的兩個連字號,轉換後會變回一個連字號。像 --verbose 這種參數,轉換後要自己手動修正。
把結果貼到實際執行的地方,並在那裡測試。改成一般符號不會改變文字的意思,所以能正常執行才是真正的檢查。
檢查結果
把改好的文字再用一次移除隱藏字元,並查看標記檢視。如果還留下任何標記,代表第一次處理沒有涵蓋的字元,例如零寬空格或不常見的空格。標記檢視會指出每個字元的位置,方便你直接修正。
這些字元在螢幕上幾乎一模一樣,所以光靠肉眼看不出來。直引號和彎引號的形狀差異很小,許多字型裡的短破折號也和連字號看起來相同。要測試文字,而不是相信眼睛。
什麼時候不要改
如果文字是給人印刷或在網頁上閱讀的,就保留彎引號和破折號,因為那是正確的排版。只有要貼進程式碼、CSV、公式或指令的內容才需要改成一般符號。若是在文書處理軟體裡寫的文字,之後要貼進程式碼,就先關閉智慧型引號的選項。
特殊情況
- 混用的引號。 同一份文件可能同時有彎引號和直引號。先執行一次轉換,再搜尋結果中是否還有殘留,因為來源不同,寫法也不一樣。
- 詞中的撇號。 縮寫中的彎撇號會變成直撇號,這也是大多數程式碼的要求。若字串內含有縮寫,請仔細檢查。
- 保留原始檔。 轉換是單向的:直引號無法告訴你它原本是哪一種彎引號。請保留原始文件,並只在副本上做修改。
- 句子中的破折號。 句中用來表示停頓的長破折號會變成連字號,例如「等等——停下來」會變成「等等 - 停下來」。如果文字是給人閱讀而非給程式使用,請手動改回。
- 看不見的字元。 貼上的文字也可能包含零寬空格。它們不是引號,但同樣會以類似的方式弄壞程式碼。隱藏字元指南有詳細說明。
借助 AI 協助,由英文原文翻譯而成。
留言
還沒有留言,搶先留言吧。


