vb .net webclient downloaddata with new lines

时间:2017-11-06 19:06:27

标签: vb.net webclient

我正在使用webclient downloaddata下载一些网站输出的“纯文本”。

一切都运行良好,我将所有文本保存在新的txt中。 我的问题是文本格式化。

例如,网站输出如下(新行中的每个信息):

Name - John Doe
Age - 33
City - New York

但是当我将这些数据保存在文件中时,它会像以下一样保存:

Name - John DoeAge - 33City - New York

任何人都知道如何让它写入网页中显示的文件?

我的代码现在:

    Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    For value As Integer = 1 To TextBox3.Text
        Dim WebClient As WebClient = New WebClient()
        WebClient.Encoding = System.Text.Encoding.Unicode
        Dim sourceString As Byte() = New System.Net.WebClient().DownloadData(TextBox1.Text & value & TextBox2.Text)
        Dim htmlCode = Encoding.UTF8.GetString(sourceString)
        Dim filepath = "C:\Project\" & value & ".txt"
        System.IO.File.AppendAllText(filepath, htmlCode)
        BackgroundWorker1.ReportProgress(value)
    Next
End Sub

2 个答案:

答案 0 :(得分:1)

请尝试在文本编辑器中检查您收到的字符串,该文本编辑器将显示隐藏的字符,如Word或Notepad ++。您可能会获得换行符,而应该是回车换行符。如果是这种情况,您可以像这样转换它。

htmlCode = htmlCode.Replace(vbLF, vbCrLf)

答案 1 :(得分:0)

下载的文件实际上有多行,但您无法在Windows的内置记事本应用程序中看到它们(也不能在常规的TextBox中看到它们。)

之所以这样,是因为两个只检测 CrLf 格式的行结尾(回车符+换行符),不过因为很多web服务器是在Unix上构建的或类Unix系统(如Linux),他们只使用 Lf 换行)作为行结尾。有些服务器甚至在上传时将文本文件转换为 Lf 格式,这意味着文件最初可能具有Windows的行结尾,但在上传时服务器会将它们转换为Unix格式。 / p>

在这种情况下,您可以通过用 CrLf 替换所有行结尾来自行转换。一个Regex替换每一行结尾(即使是正确的行,以确保所有行相同)将是最好的:

Dim htmlCode = Regex.Replace(Encoding.UTF8.GetString(sourceString), "\r\n|\r|\n", Environment.NewLine)