我正在使用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
答案 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)