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++!


参考:

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