Text.Encoding-Problem (Umlaute)

05/10/2009 - 21:29 von Andreas Mahub | Report spam
Hi Leute,

habe heute ein kleines(!) Problem was mich aber seit Stunden verzweifeln
làsst. Also, meine FTP-Klasse funktioniert von Tag zu Tag besser. Heute habe
ich den ersten großen Test gemacht und von einem Webspace mit vielen
Unterordnern hunderte von Dateien runtergeladen und als Backup lokal
gespeichert.

Kurz vor Schluss bumm, "Programm funktioniert nicht mehr". Und mir wurde
auch klar woran es liegt, eine Datei konnte auf dem Server nicht gefunden
werden. Nennen wir sie mal "Küche.html". Ein Beispiel wie ich die Datei
anfordere:
Private Function GetRequest(ByVal URI As String) As FtpWebRequest
'create request
Dim result As FtpWebRequest =
DirectCast(FtpWebRequest.Create(URI), FtpWebRequest)
'Set the login details
result.Credentials = GetCredentials()
'Do not keep alive (stateless mode)
result.KeepAlive = False
Return result
End Function
Und in der String-Variable URI steht z.B.
ftp://www.domain.de/ordner1/Küche.html

Und dieses Umlaut nimmt mir der FTP-Server natürlich "übel". Das das
Verzeichnis jetzt richtig eingelesen wird habe ich hinbekommen, vorher kam
nàmlich "K?che.html" bei mir an. Das habe ich dann mit dem Encoding.Default
hinbekommen. Aber wie mache ich es bei der Anfrage richtig das der Server
die Umlaute in der URI versteht?!

Danke für eure Hilfe.

Gruß
Andy

PS: Die Routine stammt nicht von mir, es ist ein Teil von einem Projekt das
man kostenlos herunterladen und frei verwenden darf.
 

Lesen sie die antworten

#1 Christoph Schneegans
05/10/2009 - 22:41 | Warnen spam
Andreas Mahub schrieb:

Und in der String-Variable URI steht z.B.
ftp://www.domain.de/ordner1/Küche.html



URLs dürfen definitionsgemàß keine Nicht-ASCII-Zeichen enthalten.
Versuch es Windows-1252-maskiert mit
"ftp://www.domain.de/ordner1/K%FCche.html" oder UTF-8-maskiert mit
"ftp://www.domain.de/ordner1/K%C3%BCche.html". Die UTF-8-Variante
erhàlt man mittels

Dim u As New System.Uri("ftp://www.domain.de/ordner1/Küche.html")
Console.Write(u.AbsoluteUri)

sehr leicht. Für Windows-1252 scheint es hingegen keine eingebaute
Methode zu geben; die meisten maskieren zu viel, vgl.
<http://schneegans.de/asp.net/url-escape/>. Du mußt gerade die
Nicht-ASCII-Zeichen in der URL durch %HH ersetzen, etwa so:

Dim url As String = "ftp://www.domain.de/ordner1/Küche.html"
Dim win1252 As Encoding = Encoding.Default
Dim sb As New StringBuilder
For Each c As Char In url
If AscW(c) > &H7F Then
sb.Append(HttpUtility.UrlEncode(c, win1252))
Else
sb.Append(c)
End If
Next

<http://schneegans.de/web/kanonische-adressen/> · Gute URLs

Ähnliche fragen