FTP-Zeichensatz

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

FTP-Zeichensatz

Beitrag von RSBasic »

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:

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
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:

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
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. :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
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: FTP-Zeichensatz

Beitrag von ts-soft »

Nutze PB 5.50 :mrgreen: UTF8()
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.
Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: FTP-Zeichensatz

Beitrag von RSBasic »

Danke für deine schnelle Antwort.
Gut zu wissen, dass die neuste Beta-Version eine eigene UTF-8-Konvertierungsfunktion anbietet.
Aber sollte der Zeichensatz nicht bei OpenFTP() angegeben werden, in welchem Format die Strings übertragen werden sollen statt nachträglich zu konvertieren? Standardmäßig nimmt PB soweit ich weiß immer ASCII und es wäre schön, wenn man es direkt festlegen kann, wie bei FileZilla.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: FTP-Zeichensatz

Beitrag von mhs »

Ich würde fest erwarten, dass das die FTP Lib den Zeichensatz selbständig anhand des Servers erkennt und entsprechend dem Zeichensatz in PB konvertiert.

Aus der RFC:
A.2 Transition Considerations

- Servers which support this specification, when presented a pathname
from an old client (one which does not support this specification),
can nearly always tell whether the pathname is in UTF-8 (see B.1)
or in some other code set. In order to support these older clients,
servers may wish to default to a non UTF-8 code set. However, how a
server supports non UTF-8 is outside the scope of this
specification.

- Clients which support this specification will be able to determine
if the server can support UTF-8 (i.e. supports this specification)
by the ability of the server to support the FEAT command and the
UTF8 feature (defined in 3.2). If the newer clients determine that
the server does not support UTF-8 it may wish to default to a
different code set. Client developers should take into
consideration that pathnames, associated with older servers, might
be stored in UTF-8. However, how a client supports non UTF-8 is
outside the scope of this specification.
Es gibt wohl einen FEAT Befehl, mit dem die unterstüzten Features des Servers abgefragt werden können und mit OPTS ON können diese vom Client dann auch aktiviert werden:
2. UTF-8 Option

The user issues the OPTS UTF-8 command to indicate its willingness to
send and receive UTF-8 encoded pathnames over the control connection.
Prior to sending this command, the user should not transmit UTF-8
encoded pathnames.
2016-06-24 04:58:11 6784 1 Befehl: FEAT
2016-06-24 04:58:11 6784 1 Antwort: 211-Features:
2016-06-24 04:58:11 6784 1 Antwort: CCC
2016-06-24 04:58:11 6784 1 Antwort: PBSZ
2016-06-24 04:58:11 6784 1 Antwort: AUTH TLS
2016-06-24 04:58:11 6784 1 Antwort: MFF modify;UNIX.group;UNIX.mode;
2016-06-24 04:58:11 6784 1 Antwort: REST STREAM
2016-06-24 04:58:11 6784 1 Antwort: MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
2016-06-24 04:58:11 6784 1 Antwort: UTF8
2016-06-24 04:58:11 6784 1 Antwort: EPRT
2016-06-24 04:58:11 6784 1 Antwort: EPSV
2016-06-24 04:58:11 6784 1 Antwort: MDTM
2016-06-24 04:58:11 6784 1 Antwort: SSCN
2016-06-24 04:58:11 6784 1 Antwort: LANG ru-RU.UTF-8;ru-RU;en-US
2016-06-24 04:58:11 6784 1 Antwort: TVFS
2016-06-24 04:58:11 6784 1 Antwort: MFMT
2016-06-24 04:58:11 6784 1 Antwort: SIZE
2016-06-24 04:58:11 6784 1 Antwort: PROT
2016-06-24 04:58:11 6784 1 Antwort: 211 End
2016-06-24 04:58:11 6784 1 Befehl: OPTS UTF8 ON
2016-06-24 04:58:12 6784 1 Antwort: 200 UTF8 set to on
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: FTP-Zeichensatz

Beitrag von RSBasic »

Guten Morgen und danke mhs fürs Zitieren.
Eine automatische Zeichensatz-Erkennung und -Setzung finde ich noch besser.
Ich werde es mal im englischen Forum posten.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten