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

Why 'New Line' takes two characters?

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

123
456
789

然后我尝试使用 InStr() 函数找出字符“4”的位置。没想到结果是6,我用'3'这个字符试了一下,结果是3。所以,3和4之间一定有两个字符。

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

好的。 "New Line" 有一个字符位于第 4 个位置。如果是,那么第 5 个字符是什么?

用于换行符的实际字符因平台而异。一些系统使用字符 13 来表示换行,一些使用 10,还有一些,如 Windows,两者都使用。

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

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

所以,考虑到这两件事,如果你想在下一行的开头开始打字,你需要做这两件事。您需要前进到页面的下一行并且 return 到行的开头,因此 CRLF,两个字符。

据推测,一些系统设计者认为每个换行使用两个字符太浪费了,因为带有视频显示器的计算机很少需要添加的细微差别,所以他们选择只使用其中一个 CRLF。由于使用的正确编码因平台而异,因此最好在 .NET 中使用 Environment.NewLine 以获得适合当前系统的编码。

例如,当您 运行 在 windows 上使用此控制台应用程序时:

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

输出为:

423

回车-return只是让光标回到了行首。它并没有导致它向下移动到下一行,所以 4 在打印时会覆盖 1。