zoukankan      html  css  js  c++  java
  • Linux、Windows 和 Mac 中的换行符对比

    原文地址:Linux、Windows 和 Mac 中的换行符对比

    博客地址:http://www.moonxy.com

    一、前言

    经常使用 Window、Linux 等不同操作系统的开发者,在处理文本的时候,基本都会遇到不同系统,出现换行格式不一致的问题,原因就出在不同的系统,定义了不同的换行符。

    二、Linux、Windows 和 Mac 中的换行符对比

    对于换行这个动作,Unix下一般只有一个 0x0A 表示换行(" "),Windows 下一般都是 0x0D 和 0x0A 两个字符,即 0D0A(" "),苹果机(MAC OS系统)则采用回车符 CR 表示下一行(" ")。

    Unix 系统中:每行结尾只有 "<换行>",即 " ";

    Windows 系统中:每行结尾是 "<回车><换行>",即 " ";

    Mac 系统中:每行结尾是 "<回车>",即 " "。

    不同系统所定义的换行格式不同,导致的直接后果是,Unix/Mac 系统下的文件在 Windows 里打开的话,所有文字会变成一行;而 Windows 里的文件在 Unix/Linux 下打开的话,在每行的结尾会多车一个 ^M 字符。

    Dos 和 windows 采用 "回车+换行",即 "CR + LF" 表示下一行,即敲一下回车键,相当于同时执行了 "回车+换行",即 ^M$($ 不是换行符的表示,换行符没有表示出来,$ 是文本结束 EOF 的表示)。

    而 UNIX/Linux 采用 "换行符",即 "LF" 表示下一行,即 " ";

    苹果机(MAC OS系统)则采用 "回车符",即 "CR" 表示下一行,即 " ";

    CR 用符号 " " 表示,十进制 ASCII 代码是 13,十六进制代码为 0x0D

    LF 使用 " "符号表示,ASCII代码是 10,十六制为 0x0A。所以 Windows 平台上换行在文本文件中是使用 "0D0A" 两个字节表示,而 UNIX/Linux 和苹果平台上换行则分别是使用 0A0D 一个字节表示。

    由于 DOS 风格的换行使用 " ",如果把这样的文件上传到 Unix/Linux,有些版本的 vi 不能识别 " ",所以 vi 显示时在行尾会出现 ^M 出来,但是有些就能识别 ,正常显示回车换行。

    附部分 ASCII 码对照表:

    三、使用 Notepad++ 查看回车和换行符并相互转换

    Notepad++ 中可以设置 Windows、Unix 和 Mac三种行尾换行符格式及其之间的转换,如下:

    默认不显示回车及换行符:

    1)设置 Notepad++ 显示换行符,这样才能看到效果, 视图 -> 显示符号 -> 显示行尾符,如果是英文版的 Notepad++,则应该是 View -> Show Symbol -> Show End of Line;

    2)设置行尾符格式:编辑 ->  档案格式转换 ->(可选 Windows、Unix 和 Mac中的一种),如果是英文版的 Notepad++,则应该是 Edit -> EOL Conversion -> Windows Format、Unix/OSX Format、Old Mac Format。

    四、Linux 中去除 DOS/Windows 文档中出现的 "^$"

    有时候将 Windows 中编辑好的文本上传到 LInux 服务器中使用,此时就需要将 Windows 中的 "^$" 去除,如下:

    [root@ryan linux]# ll win1.txt
    -rw-r--r-- 1 root root 21 Apr 20 22:09 win1.txt
    [root@ryan linux]# cat win1.txt
    aaa bbbb
    cccc
    123

    使用 cat -A 选项查看文本所有的字符,如下:

    [root@ryan linux]# cat -A win1.txt
    aaa bbbb^M$
    cccc^M$
    123^M$

    或者使用 cat -v 选项显示出非打印字符,如下:

    [root@ryan linux]# cat -v win1.txt
    aaa bbbb^M
    cccc^M
    123^M

    去除 "^M" 符号,如下:

    [root@ryan linux]# cat -v win1.txt | tr -d '^M'  > linux1.txt
    [root@ryan linux]# cat -A linux1.txt
    aaa bbbb$
    cccc$
    123$

    或者使用其 ASCII 码,如下:

    [root@ryan linux]# cat win1.txt |tr -d '15' > linux2.txt
    [root@ryan linux]# cat -A linux2.txt
    aaa bbbb$
    cccc$
    123$

    需要注意:八进制下,^m 是 015;^Z 是 032;tab 是 011;^是136。

    此处复习一下进制的相关知识,如下:

    在C语言里,整数有三种表示形式:十进制,八进制,十六进制。

    其中以数字0开头,由 0~7 组成的数是八进制。以 0X 或 0x 开头,由 0~9,A~F 或 a~f 组成是十六进制。除表示正负的符号外,以 1~9 开头,由 0~9 组成是十进制。

    1)十进制:除表示正负的符号外,以 1~9 开头,由0~9组成。如:128,+234,-278。

    2)八进制:以 0 开头,由 0~7组成的数。如:0126,050000。

    3)十六进制:以 0X 或 0x 开头,由 0~9,A~F 或 a~f  组成。如:0x12A,0x5a000。

  • 相关阅读:
    每日总结2021.9.14
    jar包下载mvn
    每日总结EL表达语言 JSTL标签
    每日学习总结之数据中台概述
    Server Tomcat v9.0 Server at localhost failed to start
    Server Tomcat v9.0 Server at localhost failed to start(2)
    链表 java
    MVC 中用JS跳转窗体Window.Location.href
    Oracle 关键字
    MVC 配置路由 反复走控制其中的action (int?)
  • 原文地址:https://www.cnblogs.com/cnjavahome/p/8893813.html
Copyright © 2011-2022 走看看