/ / Convertendo UTF8 para ANSI? - vb.net, utf-8

Convertendo UTF8 para ANSI? - vb.net, utf-8

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 № 1

Eu 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.