为什么“ New Line”需要两个字符?

时间:2019-01-17 19:52:48

标签: vb.net newline

我制作了一个.txt文件(UTF-8),并将以下文本放入其中:

123
456
789

然后,我尝试使用InStr()函数来找出字符'4'的位置。令人惊讶的是,结果为6。我尝试使用字符“ 3”,结果为3。因此,在3和4之间必须有两个字符。

然后我尝试了InStr(TextBox1.Text, Chr(13)),结果为4。

好的。 “新行”的字符位于第4位。如果是这样,那么那里的第5个字符是什么?

1 个答案:

答案 0 :(得分:2)

换行符使用的实际字符在一个平台与另一个平台之间是不同的。某些系统使用字符13来表示换行符,某些系统使用10,而某些系统(例如Windows)则同时使用两者。

从技术上讲,字符13表示回车(将打印机的打印头返回页面的左侧),这就是为什么它通常被称为CR的原因。请记住,在计算的早期,打印机被用作终端,而不是视频屏幕。因此,在视频终端上,CR最接近的等效项是使光标返回到当前行的开头,而不是前进到下一行。

字符10表示换行(LF),这意味着将纸张前进(即进给)一行,以便打印头可以在下一行打印。在视频终端上,与换行最接近的等效项是将光标向下移动到下一行,但将其保持在相同的x位置。

因此,请记住这两个方面,如果您想在下一行的开头开始键入内容,则需要同时做这两项。您需要前进到页面的下一行并返回到该行的开头,因此CRLF是两个字符。

大概,一些系统设计人员认为,对于带有视频显示的计算机很少需要添加细微差别的情况下,每行换行使用两个字符太浪费了,因此他们选择仅使用CR或{ {1}}。由于使用的正确编码会从一个平台更改为另一个平台,因此最好在.NET中使用LF来获取适合当前系统的任何一种。

例如,当您在Windows上运行此控制台应用程序时,请考虑以下事项:

Environment.NewLine

输出为:

Public Sub Main()
    Console.Write("123" & vbCr)
    Console.Write("4" & vbCr)
End Sub

回车仅使光标返回到行首。它并没有导致它向下移动到下一行,因此在打印4时,它会覆盖1。