curl (3) Illegal characters found in URL

摘要

在windows 中編輯的文件上傳到 Linux 後,使用 curl 等工具調用時會報一個curl: (3) Illegal characters found in URL 的錯誤,這是因爲 Linux 與 Windows 在文本文件中添加的換行符不一樣。Linux 在每行只會添加一個\n,Windows系統會在每行後加入\r\n, 所以在 Windows 下的文件放到 Linux上時就會出現這個問題,即多了一個\r

解決辦法

轉換文件

# 刪除test.sh文件中的'\r'字符,並輸出到testWithoutR.sh文件中。
tr -d '\r'  test.sh > testWithoutR.sh

拓展:換行符CRLF (carriage return/line feed, 0d 0a)

換行符可能用到的字符(基於十六進制而言):

0x0d => \r, carrige return:回車(CR), 把光標移到同一行的頂頭。
0x0a => \n, new line:換行(LF), 把光標移到下一行。


在不同的操作系統這幾個字符表現不同,比如在WIN系統下,這兩個字符就是表現的本義,在UNIX類系統,換行\n就表現爲光標下一行並回到行首,在MAC上,\r就表現爲回到本行開頭並往下一行,至於ENTER鍵的定義是與操作系統有關的。

系統 換行符
Windows \r\n
UNIX類 \n
MAC \r

需要注意的是

雖然不同系統使用的換行符不同,但是因爲這兩個字符都是控制字符(不可打印),因此即使有時候弄混了,也可能顯示不出來。但是出現🐛的可能性非常大!!!

換行符不同可能出現的情況(1,2在MINGW64 git bash中):

  1. \ No newline at end of file:文末沒有換行。
  2. ^M:Windows格式的換行符顯示在git bash中,會出現這個字符。
  3. Linux文本在Windows中打開,會變成只有一行。

注意

如果需要將文件上傳到linux,建議使用一個可以設置使用何種換行符的編輯器,EditPlus就不行,它是以文中哪種換行符比較多爲標準,自動探測使用何種換行符的;建議使用Notepad++!


參考:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章