If txtLog
is a RichTextBox http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.aspx控制:
Dim text = "hi" & vbCrLf
Debug.WriteLine("t:" & text.Length) ' --> 4, as expected
txtLog.Text = text
Debug.WriteLine("tL:" & txtLog.TextLength) ' --> 3. muh?! :(
看过之后RTF规范 http://www.biblioscape.com/rtf15_spec.htm,段落的结尾标记为\par
,这两者都不是CR
nor LF
。这是有道理的,因为 RTF 是标记语言;就像在 HTML 中一样,行结尾本身没有什么意义。
所以想必,在写入RichTextBox
,我的行尾被编码成\par
。然后,在提取时,\par
正在被翻译回实际的行结尾以供使用。
事实证明这一行的结尾是vbLf
.
为什么,既然微软几乎一直采用CRLF
对于行结尾,会RichTextBox
翻译\par
to vbLf
代替vbCrLf
?
RichTextBox 以这种方式实现的直接原因是RTF规范 http://msdn.microsoft.com/en-us/library/aa140283%28v=office.10%29.aspx#rtfspec_21表示回车符(单独)或换行符本身相当于\par
.
。 。 。回车符(字符值 13)或换行符(字符值 10)将被视为 \par 控件。 。 。
至于微软为什么要制定这样的规范,我不太清楚。但我推测这与以下事实有关:RTF 的第一个版本 http://en.wikipedia.org/wiki/Rich_Text_Format#History是在 20 世纪 80 年代为 Microsoft Office 的 Mac 版本开发的。我猜他们开发了这个 par 规则,以便它在 Mac 上运行良好,或者作为一般的跨平台格式运行良好。如果是这种情况,那么微软可能会非常犹豫是否要在未来几年(90 年代、00 年代等)修改规范以匹配标准 Windows 行结尾(因为一般来说,微软有尝试支持向后的历史)对于这样的事情尽可能地兼容)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)