FTP-Zeichensatz
Verfasst: 23.06.2016 21:11
Guten Abend,
ich möchte gerne bestimmte Dateien per FTP herunterladen. Ich bin mit Hilfe von SetFTPDirectory() im richtigen Zielverzeichnis und lade eine Datei mit ReceiveFTPFile() und FTPDirectoryEntryName() herunter. Beispielsweise: Arbeitsspeichergröße ermitteln.pb
Diese Datei kann erfolgreich heruntergeladen werden, aber diese Datei hat nach dem Herunterladen leider den Dateinamen "Arbeitsspeichergröße ermitteln.pb". Umlaute und Eszett können nicht direkt übernommen bzw. richtig dargestellt werden, weil die verwendeten Zeichensätze (Anwendung <> Server) anscheinend unterschiedlich sind.
Ich habe bei meiner Test-Anwendung sowohl mit und ohne Unicode-Compiler-Einstellung ausprobiert. Das Ergebnis ist bei beiden Versionen gleich. In der PB-Hilfe habe ich nach einer Zeichensatz-Einstellug gesucht, aber nichts gefunden. Habe ich was übersehen?
Auf meinem Server wird soweit ich weiß standardmäßig UTF-8 verwendet.
Bei FileZilla kann man optional den Zeichensatz festlegen, aber bei PB habe ich leider nichts gefunden. Gibt es eine Einstellung, die man vornehmen kann? Oder kennt ihr eine Lösung für das Umlautproblem?
Ich habe eine Lösung gefunden, mit der man den String nach UTF-8 konvertieren kann:
Das funktioniert zwar auch, aber bietet PB eine eigene Einstellung an?
Um das Problem besser zu zeigen und damit ihr es testen könnt, habe ich für euch einen FTP-Testbenutzer angelegt und den folgenden Beispielcode geschrieben:
Wie man sieht, können nicht alle Dateinamen korrekt ausgelesen werden, weil der falsche Zeichensatz verwendet wird. Wenn ich es manuell mit Hilfe der AsciiToUTF8-Funktion konvertiere, dann werden die Umlaute und Eszett korrekt dargestellt.
Ich frage mich nur, was passiert, wenn der Server nicht UTF-8 ist, dann gibt es wahrscheinlich trotzdem ein Zeichensatz-Problem oder? Wenn ja, könnte man auch den Zeichensatz im String ermitteln? Dann könnte man so machen, dass der String nur dann konvertiert wird, wenn es erforderlich ist.
Gibt es in PB eine Möglichkeit, die ich vielleicht übersehen habe oder gibt es eine andere Vorgehensweise? Falls diese Zeichensatz-Einstellung tatsächlich fehlt, dann werde ich es im englischen Forum posten. Denn diese Einstellung wird meiner Meinung nach dringend benötigt, wenn man per FTP mit verschiedenen, unterschiedlichen Servern arbeiten möchte.
Danke im Voraus fürs Testen und für eure Ideen und Vorschläge.
ich möchte gerne bestimmte Dateien per FTP herunterladen. Ich bin mit Hilfe von SetFTPDirectory() im richtigen Zielverzeichnis und lade eine Datei mit ReceiveFTPFile() und FTPDirectoryEntryName() herunter. Beispielsweise: Arbeitsspeichergröße ermitteln.pb
Diese Datei kann erfolgreich heruntergeladen werden, aber diese Datei hat nach dem Herunterladen leider den Dateinamen "Arbeitsspeichergröße ermitteln.pb". Umlaute und Eszett können nicht direkt übernommen bzw. richtig dargestellt werden, weil die verwendeten Zeichensätze (Anwendung <> Server) anscheinend unterschiedlich sind.
Ich habe bei meiner Test-Anwendung sowohl mit und ohne Unicode-Compiler-Einstellung ausprobiert. Das Ergebnis ist bei beiden Versionen gleich. In der PB-Hilfe habe ich nach einer Zeichensatz-Einstellug gesucht, aber nichts gefunden. Habe ich was übersehen?
Auf meinem Server wird soweit ich weiß standardmäßig UTF-8 verwendet.
Bei FileZilla kann man optional den Zeichensatz festlegen, aber bei PB habe ich leider nichts gefunden. Gibt es eine Einstellung, die man vornehmen kann? Oder kennt ihr eine Lösung für das Umlautproblem?
Ich habe eine Lösung gefunden, mit der man den String nach UTF-8 konvertieren kann:
Code: Alles auswählen
Procedure.s AsciiToUTF8(String$)
Protected Buffer$
Buffer$ = Space(Len(String$))
PokeS(@Buffer$, String$, -1, #PB_Ascii)
String$ = PeekS(@Buffer$, -1, #PB_UTF8)
ProcedureReturn String$
EndProcedure
Um das Problem besser zu zeigen und damit ihr es testen könnt, habe ich für euch einen FTP-Testbenutzer angelegt und den folgenden Beispielcode geschrieben:
Code: Alles auswählen
EnableExplicit
InitNetwork()
If OpenFTP(1, "rsbasic.de", "webika3rg_qch3ai", "PureBasic!2016")
If ExamineFTPDirectory(1)
While NextFTPDirectoryEntry(1)
Debug FTPDirectoryEntryName(1)
Wend
EndIf
CloseFTP(1)
EndIf
Ich frage mich nur, was passiert, wenn der Server nicht UTF-8 ist, dann gibt es wahrscheinlich trotzdem ein Zeichensatz-Problem oder? Wenn ja, könnte man auch den Zeichensatz im String ermitteln? Dann könnte man so machen, dass der String nur dann konvertiert wird, wenn es erforderlich ist.
Gibt es in PB eine Möglichkeit, die ich vielleicht übersehen habe oder gibt es eine andere Vorgehensweise? Falls diese Zeichensatz-Einstellung tatsächlich fehlt, dann werde ich es im englischen Forum posten. Denn diese Einstellung wird meiner Meinung nach dringend benötigt, wenn man per FTP mit verschiedenen, unterschiedlichen Servern arbeiten möchte.
Danke im Voraus fürs Testen und für eure Ideen und Vorschläge.