\\ n和\\ r之间的区别?

\\n (换行符)和\\r (回车符)有什么区别?

特别是\\n\\r之间是否有实际区别? 在某些地方应该使用一个而不是另一个?


#1楼

两个不同的字符。

\\n用作Unix文本文件中的行结束符

\\r用作Mac文本文件中的行结束符

\\r\\n (即两者)用于终止Windows和DOS文本文件中的行。


#2楼

从历史上看, \\n用于将笔架向下移动,而\\r用于将笔架移回到页面的左侧。


#3楼

不同操作系统的两个不同字符。 这在需要使用\\r\\n通过TCP/IP传输的数据中也起作用

\\n Unix

\\r Mac

\\r\\n Windows和DOS。


#4楼

就ASCII码而言,它是3-因为它们分别是10和13 ;-)。

但认真的说,有很多:

  • 在Unix和所有类似Unix的系统中, \\n是行尾代码, \\r表示没什么特别的
  • 因此,在C语言和大多数以某种方式(甚至是远程)复制它的语言中, \\n是行尾的标准转义序列(根据需要转换为OS特定的序列/从OS特定的序列转换为该序列)
  • 在旧的Mac系统(OS X之前的版本)中, \\r代替了行尾代码
  • 在Windows(和许多旧的操作系统)中,行尾代码按顺序是2个字符\\r\\n
  • (令人惊讶;-)的后果(回到比Windows更早的操作系统), \\r\\n是Internet上文本格式的标准行终止符
  • 对于类似机电电传打字机的“终端”, \\r命令滑架向左返回,直到碰到最左边的挡块(缓慢的操作), \\n命令滚轮向上滚动一行(操作快得多),这就是原因你总是有\\r 之前 \\n ,所以,虽然车还在继续向左辊可以移动- !),维基百科有一个更详细的解释
  • 为字符模式端子(典型的模拟偶数旧的印刷那些如上述),在原始模式下, \\r\\n在光标方面类似(动作除了两者,因为没有托架或滚柱;-)

实际上,在现代的写入文本文件的上下文中,应始终使用\\n (如果您使用的是奇怪的操作系统(例如Windows;-,则底层的运行时将翻译该内容)。 使用\\r的唯一原因是,如果您正在写一个字符终端(或者更可能是一个模拟它的“控制台窗口”),并且希望您写的下一行覆盖您刚写的最后一行(有时用于愚蠢的“ ascii动画”(例如进度条)的效果)–不过,在GUI的世界中这已经变得过时了;-)。


#5楼

去完成,

在shell(bash)脚本中,您可以使用\\r在行的前面发送光标,当然也可以使用\\n在新行上放置光标。

例如,尝试:

echo -en "AA--AA" ; echo -en "BB" ; echo -en "\rBB"
  • 第一个“回声”显示AA--AA
  • 第二种: AA--AABB
  • 上一个: BB--AABB

但是不要忘记使用-en作为参数。


#6楼

在Windows中,\\ n移至下一行的开头。 \\ r移至当前行的开头,而不移至下一行。 我已经在自己的控制台应用程序中使用了\\ r,在其中我正在测试一些代码,并且我不想看到文本在屏幕上滚动,因此在打印出一些文本(例如帧频后, FPS),我将打印f(“%-10d \\ r”,fps); 这会将光标返回到该行的开头,而不会向下移动到下一行,并允许我在屏幕上显示其他信息,而当帧率在同一行上不断更新时,该信息不会滚动(%-10表示确定输出至少为10个字符,请左对齐,以便最后用空格填充,并覆盖该行的所有旧值)。 通常,当我将调试的东西输出到控制台屏幕时,使用此类东西非常方便。

一点历史

/ r代表“归还”或“回车”,这归功于打字机的历史。 回车将您的车一直向右移动,因此您在行首输入。

/ n代表“换行”,从打字机时代开始,您一直移到新行。 不过,这并不是很重要,这就是为什么某些操作系统同时要求同时返回/ r和/ n换行符的原因,因为这是打字机执行输入命令的顺序。这也解释了使用8位旧计算机的原因。从熟悉的“回车”中选择“返回”而不是“输入”。


#7楼

由于没有人特别提到它(他们还太年轻,不知道/不记得吗?)-我怀疑\\r\\n起源是打字机和类似设备。

当您在使用具有多行功能的打字机时想要换行时,它必须执行两个物理操作:将笔架滑回到页面的开头(在美国,左侧),并将纸张送入一个缺口。

回到行式打印机时代,例如,执行粗体文本的唯一方法是在不换行的情况下返回回车,并在旧字符上打印相同的字符,从而增加墨水量,从而使其看起来更暗(合并) 。 当机械的“换行”功能在打字机中失败时,这就是令人讨厌的结果:如果您不注意,则可以在前一行文本上键入内容。


#8楼

只是增加了混乱,我一直在使用浏览器的HTML页面中的TextArea元素来开发一个简单的文本编辑器。 考虑到CR / LF的兼容性问题,我编写了代码来检查平台,并使用适用于该平台的换行符。

但是,当我通过一个小的JavaScript函数检查TextArea中包含的实际字符时发现了一些有趣的东西,该函数生成了与字符相对应的十六进制数据。

为了进行测试,我输入了以下文本:

您好,世界[输入]

再见,残酷的世界[输入]

当我检查文本数据时,获得的字节序列是这样的:

48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 0a 47 6f 6f 64 62 79 65 2c 20 43 72 75 65 6c 20 57 6f 72 6c 64 0a

现在,大多数查看此内容并看到0a但没有0d字节的人会认为,此输出是在Unix / Linux平台上获得的。 但是,问题出在这里:我在Windows 7 64位版的Google Chrome中获得了此序列。

因此,如果您正在使用TextArea元素并检查文本,请按照上面的操作检查输出,以确保从TextArea返回了哪些实际字符字节。 我尚未看到这在其他平台或其他浏览器上是否有所不同,但是如果您要通过JavaScript执行文本处理,并且需要使该文本处理平台独立,则需要牢记这一点。

以上文章中涵盖的约定适用于控制台输出,但看起来HTML元素遵循UNIX / Linux约定。 除非有人在其他平台/浏览器上发现其他问题。


#9楼

#include <stdio.h>

void main()
{
  int countch=0;
  int countwd=1;

  printf("Enter your sentence in lowercase: ");
  char ch='a';
  while(ch!='\r')
  {
    ch=getche();
    if(ch==' ')
      countwd++;
    else
      countch++;
  }

  printf("\n Words = ",countwd);

  printf("Characters = ",countch-1);

  getch();

}

让我们以这个示例为例,尝试将\\ n替换为\\ r它将不起作用,并尝试猜测原因?

发布了0 篇原创文章 · 获赞 1 · 访问量 2565

猜你喜欢

转载自blog.csdn.net/asdfgh0077/article/details/103920530