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

但是这种情况如果不想转换换行符,可以直接用相应的解释器去执行这个文件,如

/bin/bash ./someshname.sh

3.其他应用程序如php、java等运行时报错

解释:

换行符(newline、line ending、end of line(eol)或line break),是一种控制字符,用于区分表示每一行的结束。换行符通常由line feed (LF)和carriage return (CR)两者中的一种或者它们的组合出现在计算机系统中,常见的换行符有三种:

  1. LF (UNIX and OS X \n)

  2. CR (Classic Mac \r)

  3. 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编码,其他的一些作用可以参考维基百科的英文页面(显然中文页面解释的不全面)。

解决办法:

这个问题其实简单到没有必要用一篇文章的篇幅来表述,简答说就一句话:可以借助dos2unix 工具,将Windows格式的文本文件转化成Linux下可用的格式。但为了方便那些需要详细了解的人,特地多写几句如下。

# Remove BOM and ^M (BOM and ^M can come from Windows notepad program and save as 'ANSI' or 'UTF-8')    
# such as "example^M$", ANSI, ASCII text, with CRLF line terminators    
# such as "M-oM-;M-?example^M$", UTF-8, UTF-8 Unicode (with BOM) text, with CRLF line terminators    
# Linux right format is "example$", ASCII text    
# other method is using vim [noeol][dos] :set ff=unix

# determine file type

file testfilename

# display $ at end of each line, display TAB characters as ^I, use ^ and M- notation, except for LFD and TABo

cat -A testfilename

#Text file format converters. Convert text files with DOS or Mac line endings to Unix line endings and vice versa.  
# Debian & Ubuntu: apt-get install dos2unix    
# RHEL & CentOS: yum install dos2unix

# DOS/Mac to Unix and vice versa text file format converter

dos2unix testfilename

关于显示乱码问题

1.有可能跟终端(SSH连接工具)有关系,尝试调整字符编码为utf-8

2.有可能是系统原因,如缺少中文支持

一些可用的参考:

Byte order mark https://en.wikipedia.org/wiki/Byte_order_mark

Newline https://en.wikipedia.org/wiki/Newline

ANSCII https://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters

tag:bad interpreter,移除BOM,dos2unix命令,CRLF,Linux换行符

--end--

转载于:https://blog.51cto.com/dgd2010/1762675

Linux下处理BOM头和^M的简单方法相关推荐

  1. java处理linux中的 m_Linux下处理BOM头和^M的简单方法

    Linux在网络服务器.嵌入式设备的市场上占有较大份额,Microsoft Windows在桌面操作系统上占有较大的份额,因此有很多的人喜欢用Windows去控制操作Linux. 既然用Windows ...

  2. linux 文件拆分 合并,Linux下文件的切分与合并的简单方法

    linux下文件分割可以通过split命令来实现,可以将一个大文件拆分成指定大小的多个文件,并且拆分速度非常的快,可以指定按行数分割和安大小分割两种模式.Linux下文件合并可以通过cat命令来实现, ...

  3. 嵌入式linux头文件,飞凌嵌入式知识汇092期:C工程的组织方式(头文件的功能)以及Linux下常用的头文件的作用...

    1.1每个C++/C程序通常分为两个文件.一个文件用于保存程序的声明(declaration),称为头文件.另一个文件用于保存程序的实现(implementation),称为定义(definition ...

  4. G++ 4.4.7 无法编译模板程序,Vs可以,和解?智者尾部留言,本人第一次使用vs pro,通常并且习惯在linux下写些小东西,虽然程序简单;...

    G++ 4.4.7 无法编译模板程序,Vs可以,和解?智者尾部留言,本人第一次使用vs pro,通常并且习惯在linux下写些小东西,虽然程序简单; vs 模板编译运行Ok \ linux g++ 4 ...

  5. linux下测试磁盘的读写IO速度-简易方法

    linux下测试磁盘的读写IO速度-简易方法 参考资料: https://blog.csdn.net/zqtsx/article/details/25487185 一:使用hdparm命令 这是一个是 ...

  6. Linux下安装Weblogic10.3.6并创建简单集群测试

    Linux下安装Weblogic10.3.6并创建简单集群进行测试 一.卸载随系统安装的openjdk 1.先查看安装的jdk信息,常用命令有rpm -qa | grep java, rpm -qa  ...

  7. linux php mysql.so_在linux下php挂接mysql.so扩展的方法

    总结的方向:在linux下php挂接mysql.so扩展的方法 问题背景:平常我们都是先安装mysql,然后才能去安装php.假如先安装php,后安装mysql,由于php需要连接mysql,因而在p ...

  8. linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 MySQL 服务的问题

    linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 MySQL 服务的问题 参考文章: (1)linux 下 设置 MySQL8 表名大小写不敏感方法,解决设置后无法启动 M ...

  9. linux中rm删除的文件是否可以恢复,Linux下用rm删除的文件的恢复方法

    Linux下用rm删除的文件的恢复方法_Linux教程_Linux公社-Linux系统门户网站 https://www.linuxidc.com/Linux/2008-08/14744.htm lin ...

最新文章

  1. 排序算法 | 堆排序,算法的图解、实现、复杂度和稳定性分析
  2. 「后端小伙伴来学前端了」CSS 做三角边框,必会的基础操作之一
  3. 解决Ubuntu 14下,PhpStorm 9.x 编辑器界面中文乱码的问题
  4. 阿里MySQL读写一致_阿里面试题:如何保证缓存与数据库的双写一致性?
  5. log函数 oracle power_Excel之数学函数SQRT/MOD/EXP/LN/RAND
  6. YYT 0659 - 2008全自动凝血分析仪
  7. 组织c语言程序的是什么,C程序在内存中的组织方式
  8. Spring容器创建流程(2)创建beanFactory,加载BeanDefinition
  9. java 拦截所有路径_SpringMVC 拦截器路径怎么写
  10. 树状知识汇总流程图模板分享
  11. Unity TouchScript 123木头人算法
  12. 仿微信.QQ聊天界面
  13. 字符对应的URL编码值集合
  14. 【转】在网页中嵌入QQ 阿里旺旺 淘宝代码及详解
  15. 爬取碧蓝航线wiki
  16. 商宝项目服务器,可照搬实施的商超高可用方案:proxmox + haproxy 等
  17. 对浏览器村的第二次采访
  18. DEVOPS:统一DEV、OPS和QA
  19. 普通话计算机等级用英语怎么说,普通话用英语怎么说
  20. HADOOP集群大数据词频统计及设计比较(完整教程)

热门文章

  1. python圆柱体积代码_python实现Bencode解码方法
  2. python消费kafka逻辑处理导致cpu升高_Kafka 消费迟滞监控工具 Burrow
  3. php中unset函数是在哪一章_PHP引用(amp;)使用详解
  4. 解决每次git pull、git push都需要输入账号和密码的问题
  5. springboot 循环引用问题
  6. 删除mysql指令_MySQL常用命令学习笔记
  7. 如何在本机安装mysql_机器人之如何在本机安装MySQL,并配置电脑为数据库服务器...
  8. ios签名软件_如何解决IOS企业签名超高掉签率?当然是选择小菠萝企业签名啦!...
  9. IIS出现server application error解决方案
  10. 解决远程主机不能cv问题