不同操作系统 换行符 标准不统一, 秦始皇听了都要落泪。 多少年前, 我曾也被这东西坑过无数次, 往事不堪回首。
前段时间,有个朋友碰到由于Windows的换行符和Linux换行符不一样,导致程序编译不通过。这个问题之前自己也碰到过,网上资料也蛮多,不过还是借此总结总结,因为发现总结+实践的方式能够让自己更好的提升。
一个小小的换行,其实在不同的平台有着不同的实现,为什么要这样,可以是世界是多样的。
大多数原因是因为 shell 脚本是在 Windows 编写导致的换行问题,具体原因是 Windows 的换行符号为 CRLF(\r\n),而 Unix\Linux 为 LF(\n)。
首先介绍下,在ASCII中存在这样两个字符CR(编码为13)和 LF(编码为10),在编程中我们一般称其分别为’\r’和’\n’。他们被用来作为换行标志,但在不同系统中换行标志又不一样。下面是不同操作系统采用不同的换行符: Unix和类Unix(如Linux):换行符采用 \n Windows和MS-DOS:换行符采用 \r\n Mac OS X之前的系统:换行符采用 \r Mac OS X:换行符采用 \n Linux中查看换行符 第一种使用"cat -A [Filename]" 查看,如下图所示,看到的为一个Windows形式的换行符,\r对应符号^M,\n对应符号$.
在 ASCII 码中,我们会看到有一类不可显示的字符,叫控制字符,其中就包含\r 和 \n 等控制字符。
在ASCII码中,我们会看到有一类不可显示的字符,叫控制字符,其中就包含\r 和 \n 等控制字符。
换行符(通常称为行尾、行尾 (EOL)、下一行 (NEL) 或换行符)是字符编码规范(例如,ASCII、EBCDIC)中的控制字符或控制字符序列,用于表示一行文本的结尾和新文本的开头。
我们有时在Windows编辑的文件,放到了Linux环境中,打开文件,可能发现每行结尾多了一个“^M”,导致一些在Windows下能执行的解析程序,放到了Linux中,执行就会报错,问题就出在这个"^M"。
不同的操作系统使用的换行符不同,如 Windows 使用的换行符是\r\n (回车+换行), Unix/Linux使用的换行符是\n (换行),Mac 使用的换行符是\r (回车)。
dos2unix 是将 Windows 格式文件转换为 Unix/Linux 格式的实用命令。
Windows下是CRLF(\r\n或0d0a),Linux下是LF(\n或0a)。在Linux下有时会遇到从Windows过来的文本文件,这些文件带了Windows换行符,Linux下进行脚本处理时有可能会出一些莫名其妙的错误。因此需要将这些文件转换为Linux换行符。
大家好,又见面了,我是你们的朋友全栈君。 文章目录 “\r”和”\n”的区别 “\r”和”\n”的由来 回车键和输入的”\n”有不同吗? 系统影响 java使用换行符的几种方式 “\r”和”\n
windows上测试可以安装Gitlinux中,准备删除文件的脚本deleteFile.sh,picture.txt保存待删除文件的文件路径,picture文件夹下面有三张待删除图片a/b/c.jpg
我们知道,java代码中,\r和\n和\r\n都表示换行,当我们想输出“\n”时,如果直接写System.println(“\n”);是看不到任何东西的,因为其自动被转义为换行了。
Git提供了一个换行符检查功能(core.safecrlf),可以在提交时检查文件是否混用了不同风格的换行符。这个功能的选项如下:
之前一直依稀有些认识:不同操作系统间的换行符有所差异,但是并没有很详细的了解,对于换行符差异可能引起的问题也没有多少概念.近来遇到了一个在Android上读取文件失败的问题,最后发现正是换行符差异造成的,遂而查阅了一些相关资料,在此简单记下~
经过一番检索我发现,在使用命令行时,如果samplelist文件中的文本使用了DOS换行符(\r\n),则可能会导致输出结果不正确。
windows和Linux的换行符存在差异,Windows下写的脚本拷贝到Linux系统,会导致#!/bin/bash后面多个^M,因此提示找不到文件。
在从Windows下移植某脚本文件到Linux环境之后会出现无法编译的情况,遇到类似如下的错误提示:
-bash: ./build.sh: /bin/bash^M: bad interpreter: No such file or directory
当我们使用 Windows 桌面下的编辑器编写一个 Shell 文件时,很容易将文件使用的换行符保存为 dos 格式。如果将文件上传到 Linux 服务器执行时,可能会遇到下面的错误。这是因为
换行LF-将光标“垂直”移动到下一行。(而并不移动到下一行的开头,即不改变光标水平位置)
一直对换行符这个东西概念比较模糊,直到最近花了一点时间仔细研究了一下,才彻底搞清楚这个问题,本文前面介绍部分是外文转载,后面例子是个人总结,希望能对大家有一些帮助。 回车符号和换行符号产生背景 关于“回车”(carriage return)和“换行”(line feed)这两个概念的来历和区别。 在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,
使用 Git 进行版本管理时,可能会遇到换行符不一致的问题。这个问题是由于不同的操作系统使用不同的换行符导致的。例如,Windows 系统使用 CRLF(回车换行)作为换行符,而 Linux 和 MacOS 系统使用 LF(换行)作为换行符。
本文代码都在Windows/VC++6.0下测试过, 在linux/g++下也没有问题。
有关git的操作可以参考以下网站:Git - Reference (git-scm.com)
在Windows中编辑的shell脚本,传到linux系统中,在末尾发现出现了很多^M字符
linux文件到windows中出现编译错误,不一定提示conflicting types for错误,可以通过转码的方式修改错误
在各操作系统下,文本文件所使用的换行符是不一样的。UNIX/Linux 使用的是 0x0A(LF),早期的 Mac OS 使用的是0x0D(CR),后来的 OS X 在更换内核后与 UNIX 保持一致了。但 DOS/Windows 一直使用 0x0D0A(CRLF)作为换行符。Git提供了一个“换行符自动转换”功能。这个功能默认处于“自动模式”,当你在签出文件时,它试图将 UNIX 换行符(LF)替换为 Windows 的换行符(CRLF);当你在提交文件时,它又试图将 CRLF 替换为 LF。Git 的“换行符自动转换”功能听起来似乎很智能、很贴心,因为它试图一方面保持仓库内文件的一致性(UNIX 风格),一方面又保证本地文件的兼容性(Windows 风格)。但遗憾的是,这个功能是有 bug 的,而且在短期内都不太可能会修正。
在我们的数据入库、出库的时候要特别注意这个问题,特别是在进行显示处理的时候,比如使用表单中的 textarea 进行了一段文字的提交,客户端是Windows的话就会包含\r\n,如果要显示在页面上,这些都是不起作用的,我们需要替换成页面中可以辨认的回车
^(.*?,.*?)\K, 作用: 匹配到csv文件每行数据出现的第n个逗号,可对其进行替换等操作。
原因是换行机制不一样,Unix下是\n(0A),mac下是\r(0D),win下是\r\n(0D0A)。导致的结果是在程序中会造成一定的混乱。
一个好的代码风格会使程序更容易阅读,提高团队合作的效率不说,自己看着也会赏心悦目,好像自己淫的一手好湿。
在Windows环境下用Notepad++写了个shell脚本,上传到Linux平台后运行报错如下:
在 Linux Shell 中,有很多字符是有特殊含义的,如果期望把这个字符当作普通字符来处理,需要经过 \ 的转义。
\r:全称:carriage return (carriage是“字车”的意思,打印机上的一个部件)
程序员免不了要与windows和linux打交道,在windows写启动脚本时要要用到bat,而在linux时则要使用到shell脚步。shell脚步具有严格的格式,稍不注意就会出问题,今天分享一个小经验,但是受益程序员终身。下面是网上找来的一段shell脚本:
将文件导入到Hive中,需要文件编码格式为UTF-8,\n为换行符,否则就需要进行预处理。处理过程分为两部分:编码格式、换行符。
Linux 运行 sh 脚本时可能报 \r 相关错误,本文记录解决方案。 问题复现 在 Windows 下建立脚本文件 test.sh echo "Hello World" echo "finish" 在 Linux 下运行 ./test.sh: line 1: $'\r': command not found ./test.sh: line 2: $'\r': command not found Hello World ./test.sh: line 4: $'\r': command n
在Linux中有时候我们将在Windows下编写的脚本拷贝到Linux环境中运行时会出现运行不了的情况
#之前一直没明白文件处理中的w和wb的区别到底是什么, #在看过视频后才知道,原来在linux里面是没有区别的, #但是在windows里面就能够看出区别来了 #下面来个例子: with open("普通文本文件.txt", "w",encoding='utf-8') as f: data = 'This is testing!\nThis is testing!' f.write(data) f.close() with open("二进制文本文件.txt", "wb") as
本文最后更新于2022年06月10日,已超过3天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
git的一些安装和基本的配置比较简单,我们安装完毕后。经常会针对Git配置一些全局信息,或者围绕某个本地仓库做一些配置。例如配置项目提交的作者邮箱等信息。
此文主要分享了如何将自己博客园的文章自动导出到 Markdown 文档进行存储,以便在本地进行归档管理,程序中也对文章的分类、tag、代码块以及文章中的图片进行了保存处理,以便上传到自己的图。 整理后的 Markdown 可以在本地整理成册或者发布到自己的个人博客上,比如我使用 Markdown 书写的 个人博客 。 文章目录 支持的功能 基本原理 几个知识点 将 HTML 转换成 Markdown 注意 Mac 和 Windows 以及 Linux 下的换行的区别 文章分类、tag 的获取 文章中图片保存
水电费在git中,我们使用git config 命令用来配置git的配置文件,git配置级别主要有以下3类:
首先,Git是一个开源的分布式版本控制系统,对跨平台时遇到的一些问题有很不错的支持。 其次,码云Git是一个线上的代码托管平台,能与各地的git代码仓库进行协作。 Git for Windows则是用
利用今天一天的时间,研究了一下ANSI编码和Unicode编码的不同,下面把我的研究成果写下来,以备日后参考。
不同操作系统使用的换行符是不一样的。Unix/Linux使用的是LF,Mac后期也采用了LF,但Windows一直使用CRLF【回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)】作为换行符。
领取专属 10元无门槛券
手把手带您无忧上云