Eu gostaria de baixar uma página da Web usando. WebClient
classe, extrair o título (ou seja, o que está entre <title>
e </title>
) e salve a página em um arquivo.
O problema é que a página é codificada em utf-8 e o System.IO.StreamWriter
lança uma exceção ao usar um nome de arquivo com esses caracteres.
Eu pesquisei e tentei várias maneiras de converter UTF8 para ANSI, sem sucesso. Alguém tem código de trabalho para isso?
"Using WebClient asynchronous downloading
Private Sub AlertStringDownloaded(ByVal sender As Object,
ByVal e As DownloadStringCompletedEventArgs)
If e.Cancelled = False AndAlso e.Error Is Nothing Then
Dim Response As String = CStr(e.Result)
"Doesn"t work
Dim resbytes() As Byte = Encoding.UTF8.GetBytes(Response)
Response = Encoding.Default.GetString(Encoding.Convert(Encoding.UTF8,
Encoding.Default, resbytes))
Dim title As Regex = New Regex("<title>(.+?) (",
RegexOptions.Singleline)
Dim m As Match
m = title.Match(Response)
If m.Success Then
Dim MyTitle As String = m.Groups(1).Value
"Illegal characters in path.
Dim objWriter As New System.IO.StreamWriter("c:" & MyTitle & ".txt")
objWriter.Write(Response)
objWriter.Close()
End If
End If
End Sub
Edit: Obrigado a todos pela ajuda. Acontece que o erro não foi devido a UTF8, mas sim a um caractere LF oculto na seção de título da página, que é obviamente um caractere ilegal em um caminho.
Edit: Aqui é uma maneira simples de remover alguns dos caracteres ilegais em um nome de arquivo / caminho:
Dim MyTitle As String = m.Groups(1).Value
Dim InvalidChars As String = New String(Path.GetInvalidFileNameChars()) + New String(Path.GetInvalidPathChars())
For Each c As Char In InvalidChars
MyTitle = MyTitle.Replace(c.ToString(), "")
Next
Edit: E aqui está como dizer ao WebClient para esperar o utf-8:
Dim webClient As New WebClient
AddHandler webClient.DownloadStringCompleted, AddressOf AlertStringDownloaded
webClient.Encoding = Encoding.UTF8
webClient.DownloadStringAsync(New Uri("www.acme.com"))
Respostas:
1 para resposta № 1Eu não acho que o problema está relacionado ao utf-8. Eu acho que o seu regex irá incluir </title>
se aparecer na mesma linha. Os personagens<>
são inválidos em um nome de arquivo do Windows.
Se este não for o problema, seria útil ver alguns valores de entrada e saída de amostra de MyTitle
.