/ / UTF8をANSIに変換しますか? - vb.net、utf-8

UTF8をANSIに変換しますか? - vb.net、utf-8

私は.Netを使ってウェブページをダウンロードしたい WebClient クラスでは、タイトルを抽出します(つまり、 <title> そして </title>)、ページをファイルに保存します。

問題は、ページがutf-8でエンコードされていることです。 System.IO.StreamWriter そのような文字を含むファイル名を使用すると例外がスローされます。

私はグーグルで試して、UTF8をANSIに変換するいくつかの方法を試しましたが、役に立たないものです。

"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

編集:ありがとうございました。エラーはUTF8に起因するのではなく、ページのタイトルセクションに隠れたLF文字であることが判明しました。これは明らかにパス内の不正な文字です。


編集:ここでは、ファイル名/パスで不正な文字のいくつかを削除する簡単な方法を示します:

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

編集:ここではWebClientにutf-8を期待する方法を教えています:

Dim webClient As New WebClient
AddHandler webClient.DownloadStringCompleted, AddressOf AlertStringDownloaded
webClient.Encoding = Encoding.UTF8
webClient.DownloadStringAsync(New Uri("www.acme.com"))

回答:

回答№1は1

私は問題がutf-8に関連しているとは思わない。あなたの正規表現には </title> それが同じ行に表示されている場合。キャラクター<> Windowsのファイル名では無効です。

これが問題ではない場合は、いくつかの入力と出力の値のサンプルを見ると役に立ちます MyTitle.