我制作了一个.txt文件(UTF-8),并将以下文本放入其中:
123
456
789
然后,我尝试使用InStr()
函数来找出字符'4'的位置。令人惊讶的是,结果为6。我尝试使用字符“ 3”,结果为3。因此,在3和4之间必须有两个字符。
然后我尝试了InStr(TextBox1.Text, Chr(13))
,结果为4。
好的。 “新行”的字符位于第4位。如果是这样,那么那里的第5个字符是什么?
答案 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。