显然,VB的XML文字中的CR-LF组合被静默地转换为LF.
请考虑以下最小示例:
Module Module1
Sub Main()
Dim x As XElement = <xml>1
2</xml>
' Print Bytes
Console.WriteLine(String.Join("-", x.Value.Select(Function(c) AscW(c).ToString("X2"))))
End Sub
End Module
Run Code Online (Sandbox Code Playgroud)
使用Visual Studio 2017(Framework 4.5.2)编译,这会产生
31-0A-32
Run Code Online (Sandbox Code Playgroud)
而不是
31-0D-0A-32
Run Code Online (Sandbox Code Playgroud)
正如我所料.我用二进制编辑器检查了源文件,它肯定包含xml文字中1到2之间的CR-LF(0D-0A).
这是官方记录的行为还是我的编译器的一些实现细节,我不能依赖它?如果是前者,它在哪里记录?
Microsoft正在观察可接受的XML标准,该标准仅使用换行符来表示XML中的换行符.这是为了与非Windows系统的互操作性,通常只使用换行.Windows使用CR-LF作为标准,但您通常会发现只有LF在Windows上也可以作为换行符使用.