摘要
在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中):
\ No newline at end of file
:文末沒有換行。^M
:Windows格式的換行符顯示在git bash中,會出現這個字符。- Linux文本在Windows中打開,會變成只有一行。
注意
如果需要將文件上傳到linux,建議使用一個可以設置使用何種換行符的編輯器,EditPlus就不行,它是以文中哪種換行符比較多爲標準,自動探測使用何種換行符的;建議使用Notepad++!
參考: