vb .net webclient downloaddata with new lines
vb .net webclient downloaddata with new lines
我正在使用 webclient downloaddata 下载网站输出的一些 "plain text"。
一切正常,我正在将所有文本保存在新的 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
请尝试在会显示隐藏字符的文本编辑器(例如 Word 或 Notepad++)中检查您收到的字符串。您可能会得到一个换行符,而该换行符应该是 Carriage-Return Line Feed。如果是这种情况,您可以像这样转换它。
htmlCode = htmlCode.Replace(vbLF, vbCrLf)
下载的文件实际上有多行,但您在Windows的内置记事本应用程序中看不到它们(在常规TextBox
中也看不到)。
原因是因为这两个只检测CrLf格式的行尾(Carriage return + Line feed), 但由于许多网络服务器是建立在 Unix 或类 Unix 系统上的 (例如 Linux) 它们只使用 Lf (Line feed) 作为行尾。有些服务器甚至会在您上传文本文件时将它们转换为 Lf 格式,这意味着文件最初可能具有 Windows 的行尾,但在上传时服务器将它们转换为Unix 格式。
在这种情况下,您可以通过将所有行结尾替换为 CrLf 来自行转换它。 Regex
替换每一行结尾(即使是正确的,以确保所有行都相同)将是最好的:
Dim htmlCode = Regex.Replace(Encoding.UTF8.GetString(sourceString), "\r\n|\r|\n", Environment.NewLine)
我正在使用 webclient downloaddata 下载网站输出的一些 "plain text"。
一切正常,我正在将所有文本保存在新的 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
请尝试在会显示隐藏字符的文本编辑器(例如 Word 或 Notepad++)中检查您收到的字符串。您可能会得到一个换行符,而该换行符应该是 Carriage-Return Line Feed。如果是这种情况,您可以像这样转换它。
htmlCode = htmlCode.Replace(vbLF, vbCrLf)
下载的文件实际上有多行,但您在Windows的内置记事本应用程序中看不到它们(在常规TextBox
中也看不到)。
原因是因为这两个只检测CrLf格式的行尾(Carriage return + Line feed), 但由于许多网络服务器是建立在 Unix 或类 Unix 系统上的 (例如 Linux) 它们只使用 Lf (Line feed) 作为行尾。有些服务器甚至会在您上传文本文件时将它们转换为 Lf 格式,这意味着文件最初可能具有 Windows 的行尾,但在上传时服务器将它们转换为Unix 格式。
在这种情况下,您可以通过将所有行结尾替换为 CrLf 来自行转换它。 Regex
替换每一行结尾(即使是正确的,以确保所有行都相同)将是最好的:
Dim htmlCode = Regex.Replace(Encoding.UTF8.GetString(sourceString), "\r\n|\r|\n", Environment.NewLine)