ReceiveHTTPFile und Umlaute
ReceiveHTTPFile und Umlaute
Hallo,
ich kann den Befehl ReceiveHTTPFile() erfolgreich benutzen, sofern die Datei, die man erhalten will, keine Umlaute und kein"ß" enthält. Wenn dies aber der Fall ist, dann passiert nichts. Geht das mit Umlauten generell nicht, oder kann man da etwas über irgendeine Einstellung machen? Kann mir jemand helfen?
ich kann den Befehl ReceiveHTTPFile() erfolgreich benutzen, sofern die Datei, die man erhalten will, keine Umlaute und kein"ß" enthält. Wenn dies aber der Fall ist, dann passiert nichts. Geht das mit Umlauten generell nicht, oder kann man da etwas über irgendeine Einstellung machen? Kann mir jemand helfen?
PB 5.50; Win 7
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: ReceiveHTTPFile und Umlaute
Haste den URLEncoder probiert?
Code: Alles auswählen
InitNetwork()
ReceiveHTTPFile(URLEncoder("http://www.internet.com/meine dateien/daß prügrüm.exe"), GetTemporaryDirectory() + "das program.exe")
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: ReceiveHTTPFile und Umlaute
Oder vllt. über API ? (Nicht getestet)
Code: Alles auswählen
Procedure.l DownloadFile(url$, file$, UseAPI.l=#False)
Protected state.l = #False
If UseAPI=#True
If URLDownloadToFile_(0, url$, file$, 0, 0)=#S_OK
state=#True
EndIf
Else
If ReceiveHTTPFile(url$, file$)<>#NULL
state=#True
EndIf
EndIf
ProcedureReturn state
EndProcedure
Re: ReceiveHTTPFile und Umlaute
@ts-soft, al90:
Das habe ich noch nicht probiert. Ich kann das leider erst morgen testen, weil diese "Umlautdateien" in unserem betriebseigenen Netz stehen. Aber jetzt habe ich doch Hoffnung, dass es klappt mit den Umlauten. Melde mich morgen nach dem Testen! - Danke!!
Das habe ich noch nicht probiert. Ich kann das leider erst morgen testen, weil diese "Umlautdateien" in unserem betriebseigenen Netz stehen. Aber jetzt habe ich doch Hoffnung, dass es klappt mit den Umlauten. Melde mich morgen nach dem Testen! - Danke!!
PB 5.50; Win 7
Re: ReceiveHTTPFile und Umlaute
Der Test verlief leider negativ. Aber etwas Interessantes habe ich festgestellt. Die Datei "bär.doc" wird durch URLEncoder() umgewandet in "b%E4r.doc". Wenn ich aber diese Datei mithilfe des Browsers im Netz aufsuche, sie mit der rechten Maustastse (ich rede hier über WindowsXP) anklicke, aus dem Kontext-Menü "Link-Adresse kopieren" auswähle und dann diese Adresse in die IDE von PB einfüge, dann ergibt sich für den Teil "bär.doc" Folgendes: "b%c3%a4r.doc". Gibt es für diese unterschiedliche Darstellung von "bär.doc" eine Erklärung??
Wenn ich die Darstellung "b%c3%a4r.doc" direkt verwende (also in den ReceiveHTTPFile-Befehl ohne vorgeschaltetem URLEncoder() reinschreibe), dann klappt es. Die Frage ist jetzt nur, wie kann ich diese Darstellung einer "Umlautdatei" automatisiert hinkriegen und nicht per Hand, wie jetzt in diesem Beispiel.
Wenn ich die Darstellung "b%c3%a4r.doc" direkt verwende (also in den ReceiveHTTPFile-Befehl ohne vorgeschaltetem URLEncoder() reinschreibe), dann klappt es. Die Frage ist jetzt nur, wie kann ich diese Darstellung einer "Umlautdatei" automatisiert hinkriegen und nicht per Hand, wie jetzt in diesem Beispiel.
PB 5.50; Win 7
Re: ReceiveHTTPFile und Umlaute
Ich hab's "zu Fuß" gemacht: (nicht elegant, aber es funktioniert)
Code: Alles auswählen
If FindString(datei$, "ä", 1) > 0
datei$ = ReplaceString(datei$, "ä", "%c3%a4")
EndIf
If FindString(datei$, "ö", 1) > 0
datei$ = ReplaceString(datei$, "ö", "%c3%b6")
EndIf
If FindString(datei$, "ü", 1) > 0
datei$ = ReplaceString(datei$, "ü", "%c3%bc")
EndIf
If FindString(datei$, "ß", 1) > 0
datei$ = ReplaceString(datei$, "ß", "%c3%9f")
EndIf
If FindString(datei$, " ", 1) > 0
datei$ = ReplaceString(datei$, " ", "%20")
EndIf
PB 5.50; Win 7
Re: ReceiveHTTPFile und Umlaute
Ein kleiner Hinweis:
%E4 ist die URL-Codierung von "ä" im ASCII-Format
%C3%A4 ist die URL-Codierung von "ä" im UTF-8 Format
Zitat aus Wikipedia:
%E4 ist die URL-Codierung von "ä" im ASCII-Format
%C3%A4 ist die URL-Codierung von "ä" im UTF-8 Format
Zitat aus Wikipedia:
cu, helpyAuch für die Zeichen, die nicht im ASCII-Zeichensatz enthalten sind, werden die Bytes mit vorangestelltem % kodiert. Welche Bitfolge ein Zeichen jedoch darstellt, hängt von der zu benutzenden Zeichenkodierung ab. Es wird zwar vom RFC 3986 empfohlen, UTF-8 zur Kodierung zu benutzen, da dieses Unicode-Format für alle internationalen Zeichen benutzt werden kann, was UTF-8 zwar zur Quasi-Standardkodierung für URIs macht, aber einen expliziten Standard gibt es noch nicht. Um die URL kodieren zu können, muss man also wissen oder ahnen, welche Zeichenkodierung für die abzurufende Datei benutzt wurde oder welche Kodierung der Zielrechner benutzt. Aus diesem Grund ist es immer noch sinnvoll, nur auf Zeichen aus dem ASCII-Vorrat zurückzugreifen.
n der empfohlenen Kodierung UTF-8 wäre der Buchstabe ö (mit dem Unicode-Zeichenwert 246) als %C3%B6 dargestellt. Alle Zeichenwerte über 127 werden in zwei, drei oder vier Byte-Werten repräsentiert und dem entsprechend in die %-Kodierung übernommen; wobei alle üblichen Schriftzeichen mit zwei Bytes repräsentiert werden, mehr Bytes benötigen lediglich ungebräuchliche Zeichen sowie Markierungen der Richtungsumkehr.
Meist wird immer noch ISO 8859-1 (Latin-1) für die Darstellung benutzt und dessen identischer Zeichenwert 246 (Dezimal) direkt mit Hilfe der %-Kodierung in die URL eingefügt. Der Umlaut ö wird dann als Wert %F6 dargestellt.
Beide Darstellungsarten liefern dem Server aber eine andere Bitfolge. Obwohl beide nach ihrer Art richtig kodiert sind, liefert nur eine davon die gewünschte Datei und die andere meist nur eine Fehlermeldung. Bei einigen Servern – wie zum Beispiel die der Wikipedia – wird jedoch versucht, die Kodierung zu ermitteln, um dann auf die richtige Datei weiterleiten zu können. Wenn es mit einer Kodierung nicht klappt, sollte man eine der anderen wahrscheinlichen Varianten probieren.
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)
URLEncoderUTF8() // Bug in URLEncoder() ????
Und noch was
:
Diese Funktion unterscheidet sich jedoch nicht nur in der Codierung (UTF-8 anstatt ASCII) von der PB-Funktion URLEncoder():
Es gibt jedoch Fälle, wo man auch "/" (und andere Zeichen) codieren und per URL übergeben möchte. In diesem Fall würde die PB-Funktion versagen!
==> Würdet Ihr das nun als Bug bezeichnen ... oder als Feature
???
cu, helpy

Code: Alles auswählen
Procedure.s URLEncoderUTF8( URL$ )
Protected *memory, *UTF8.Ascii, EncodedURL$, Encode, xEncode
*memory = AllocateMemory( Len(URL$) * 4 + 1 )
*UTF8 = *memory
If *UTF8
PokeS( *UTF8, URL$, -1, #PB_UTF8 )
While *UTF8\a
Select *UTF8\a
Case Asc("A") To Asc("Z"), Asc("a") To Asc("z"), Asc("0") To Asc("9"), Asc("-"), Asc("_"), Asc("."), Asc("~")
; Keine Codierung
EncodedURL$ + chr(*UTF8\a)
Default
; URL Codierung
EncodedURL$ + "%" + Hex(*UTF8\a, #PB_Ascii)
EndSelect
*UTF8 + 1
Wend
FreeMemory( *memory )
EndIf
ProcedureReturn EncodedURL$
EndProcedure
Code: Alles auswählen
Debug URLEncoder( "http://www.test.de/hallo/test_ä.doc" )
; Das ergibt: http://www.test.de/hallo/test_%E4.doc
; Meine Funktion dagegen ergibt: http%3A%2F%2Fwww.test.de%2Fhallo%2Ftest_%C3%A4.doc
==> Würdet Ihr das nun als Bug bezeichnen ... oder als Feature

cu, helpy
Windows 10
PB Last Final / (Sometimes testing Beta versions)
PB Last Final / (Sometimes testing Beta versions)