摘要
在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++!
参考: