VB.NET XML文字中的换行符

3
显然,在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

使用Visual Studio 2017 (Framework 4.5.2)编译,可以得到如下结果:

31-0A-32

不是...而是...
31-0D-0A-32

正如我所预期的那样。我使用二进制编辑器检查了源文件,确实在 xml 字面量的第 1 和第 2 行之间包含 CR-LF (0D-0A)。

这是官方文档记录的行为还是只是我不能依赖于我的编译器的某些实现细节?如果是前者,请问它在哪里记录?

1个回答

5

微软正在遵守被广泛接受的XML标准,即在XML中使用换行符时仅使用换行符。这是为了与非Windows系统互操作性而设计的,这些系统通常只使用换行符。Windows标准使用CR-LF,但通常在Windows上也可以使用LF作为换行符。


但是你通常会发现在Windows上,只有LF作为换行符也可以工作。除了记事本之外。;) - Visual Vincent
如果OP 真的 想要 cr-lf,可以创建示例元素:Dim x as New XElement("xml", "1" & vbCrLf & "2")。当然,这种方式更加繁琐。 - MarkL
@MarkL:目前,我只是使用.Replace(vbLf, vbCrLf),但如果VB对XML文字的处理方式发生变化(因此我在这里提出问题),这将会出现严重错误。 - Heinzi
"通常情况下,你会发现在Windows上只使用LF作为换行符也是可以的。" 这取决于UI库:有些控件会显示它,而有些则不会。我恰好使用了一个不显示它的控件(MS Access TextBox)。" - Heinzi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接