Linux下处理BOM头和^M的简单方法
Linux在网络服务器、嵌入式设备的市场上占有较大份额,Microsoft Windows在桌面操作系统上占有较大的份额,因此有很多的人喜欢用Windows去控制操作Linux。
既然用Windows去控制Linux,难免导致Windows系统上的产生的文件以某种途径传到了Linux系统中,因而导致显示问题或者出现乱码的情况。
例如用Windows自带的“记事本”(notepad)程序默认保存的文件会在每一行的结尾处带有^M标记。
PS: 一些常见的错误例子:有的人可能有疑问,为什么我用记事本把文件保存成UTF-8也不好用。还有的人在执行“sed -i '/^$/d' filename”时发现明明有空格却没有删除。
因此在日常使用过程中,无论是用什么工具编辑文件上传到Linux服务器,都需要注意换行符问题。
现象:
1.cat程序显示有问题
如文件的开头显示“?t”
2.bash、python等文件执行时报错
如-bash: ./someshname.sh: /bin/bash^M: bad interpreter: No such file or directory
但是这种情况如果不想转换换行符,可以直接用相应的解释器去执行这个文件,如
[code=bash;toolbar:false">/bin/bash ./someshname.sh3.其他应用程序如php、java等运行时报错
解释:
换行符(newline、line ending、end of line(eol)或line break),是一种控制字符,用于区分表示每一行的结束。换行符通常由line feed (LF)和carriage return (CR)两者中的一种或者它们的组合出现在计算机系统中,常见的换行符有三种:
LF (UNIX and OS X \n)
CR (Classic Mac \r)
CRLF(Windows \r\n)
LF是Line Feed的缩写,CR是Carriage Return的缩写,他们的控制字符(\r,\n还是\r\n)由对应的ANSCII表示。
之所以出现“^M ”是因为^M在ANSCII中就表示Carriage Return即\r所以如果在Linux的某个打印输出中出现了^M,表示换行符是Windows格式的。
BOM是Byte order mark的缩写,释义为“字节顺序标记”,用于明确表明此文件属于Unicode编码,其他的一些作用可以参考维基百科的英文页面(显然中文页面解释的不全面)。
解决办法:
[p]这个问题其实简单到没有必要用一篇文章的篇幅来表述,简答说就一句话:- Linux下处理BOM头和^M的简单方法
- 如何去掉linux源文件里面的^M符号简单方法
- linux 忘记root密码的简单处理方法
- 关于linux端口占用的简单处理方法
- 几个自己写的简单的字符处理方法(更新中)
- 硬盘中安装Linux操作系统最简单方法--------重要
- Linux下,使用C/C++编写一个简单的消息处理程序
- 简单方法确保 Linux 系统中的 SSH 安全性
- Linux下大小写转换方法全析[超级简单]
- PHP字符串处理的10个简单方法
- linux file.src.rpm 使用方法的简单介绍
- 一个简单的在页面处理图片大小的方法
- 在硬盘中安装Linux操作系统最简单的方法
- 避免程序重复运行的简单处理方法
- linux下压缩与解压缩的简单记忆方法;递归删除文件夹
- cacti无法监控linux32位系统网卡流量(超过10M)的处理方法
- PHP字符串处理的10个简单方法
- 适配不同分辨率的Android手机的简单处理方法
- 使用动态SQL语句是最简单的处理方法。
- 出错也不怕―Linux系统紧急情况处理方法