Seite 1 von 1
ftplib - Download von Dateien, die Sonderzeichen enthalten
Verfasst: Dienstag 1. Februar 2011, 15:13
von Cluster
Hallo zusammen,
ich habe ein Problem beim Ftp-Download, bei dem ich einfach nicht weiter komme. Und zwar
will ich einfach Text-Dateien herunterladen, welche z.b Umlaute enthalten. Jedoch werden
diese Sonderzeichen nicht korrekt mitübertragen und dann falsch dargestellt.
Hier der Quellcode:
Code: Alles auswählen
import ftplib
ftp = ftplib.FTP("172.16.0.1")
ftp.login("xyz","xyz")
file = open('chat.txt', 'wb')
def handleDownload(block):
file.write(block)
print "."
filename = 'chat.txt'
ftp.retrbinary('RETR ' + filename, handleDownload)
file.close()
ftp.quit()
Inhalt von chat.txt auf FTP-Server:
Änderungen
360 m³
Inhalt des heruntergeladen Files:
�nderungen vorbehalten
360 m�
Ich habe auch verschiedene Codecs versucht, aber nichts hat geklappt.
Ich hoffe ihr könnt mir weiter helfen. Irgendwie muss es doch gehen, die
Daten 1:1 zu kopieren. Vielen Dank im Voraus ...
Re: ftplib - Download von Dateien, die Sonderzeichen enthalt
Verfasst: Dienstag 1. Februar 2011, 17:49
von BlackJack
@Cluster: Das nützt nicht viel den "Inhalt" hier zu zeigen ohne dazu zu sagen welche Kodierung der Anzeige zugrunde liegt.
Ich vermute mal Du hast da gar kein Problem mit FTP sondern mit der Anzeige des Inhalts. Wie zeigst Du das denn jeweils an? Mit welchem Programm? Und was denken diese Programme jeweils was die Kodierung des Textes ist?
Re: ftplib - Download von Dateien, die Sonderzeichen enthalt
Verfasst: Mittwoch 2. Februar 2011, 08:09
von Cluster
Ich arbeite via SSH auf einer Suse Linux Enterprise Server 11 - Maschine.
Das eingestellte Charakter-Set ist:
Code: Alles auswählen
server:~ # locale
LANG=POSIX
LC_CTYPE=de_DE.UTF-8
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=
In Putty ist ebenfalls UTF-8 eingestellt.
Die Files sehe ich mir mit dem nano-Editor an.
Wenn ich das File mit cat anzeigen lasse, sind auch hier die Sonderzeichen kryptisch ...
Meiner Meinung hat es damit zu tun, dass der Inhalt mit ascii-Zeichen (128) gespeichert
werden soll. Da aber die Sonderzeichen außerhalb des Bereiches liegen, kann er dementsprechend
diese Zeichen nicht verarbeiten.
Wenn ich im Downloadhandler die Daten entsprechend Codieren will
Code: Alles auswählen
def handleDownload(block):
block.encode("utf-8")
file.write(block)
print "."
dann bekomme ich folgende Meldung:
Code: Alles auswählen
Traceback (most recent call last):
File "ftp.py", line 15, in <module>
ftp.retrbinary('RETR ' + filename, handleDownload)
File "/usr/lib64/python2.6/ftplib.py", line 399, in retrbinary
callback(data)
File "ftp.py", line 9, in handleDownload
block.encode("utf-8")
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 0: ordinal not in range(128)
Re: ftplib - Download von Dateien, die Sonderzeichen enthalt
Verfasst: Mittwoch 2. Februar 2011, 08:34
von Cluster
Ich habe das Problem gelöst.
Es liegt nicht am System oder ftplib, sondern an der Quelldatei auf dem FTP-Server.
Das ganze wurde mit ANSI-Codierung abgespeichert. Habe jetz das File
manuell nochmals mit UTF-8 hochgeladen und siehe da ... es klappt.
Vielen Dank für die Bemühungen.
Re: ftplib - Download von Dateien, die Sonderzeichen enthalt
Verfasst: Mittwoch 2. Februar 2011, 13:17
von Leonidas
Sowas wie ANSI-Codierung gibt es nicht. Du meinst vielleicht ASCII.
Re: ftplib - Download von Dateien, die Sonderzeichen enthalt
Verfasst: Mittwoch 2. Februar 2011, 13:24
von Xynon1
Hieß der erweiterte ASCII-Zeichensatz, unter Windows, nicht Ansi-Zeichensatz ?
Re: ftplib - Download von Dateien, die Sonderzeichen enthalt
Verfasst: Mittwoch 2. Februar 2011, 14:39
von Leonidas
Xynon1 hat geschrieben:Hieß der erweiterte ASCII-Zeichensatz, unter Windows, nicht Ansi-Zeichensatz ?
Naja,
nicht wirklich. Aber Microsoft nimmts selbst nicht so genau, Notepad speichert Dateien auch in "Unicode" ab, was aber eher UTF-8 oder UTF-16 ist (weiß nicht mehr genau welches).
Re: ftplib - Download von Dateien, die Sonderzeichen enthalt
Verfasst: Mittwoch 2. Februar 2011, 15:02
von Xynon1
Ah, also ANSI existiert nicht, nur CP-1252, gut zu wissen
Notepad scheint alle
drei speichern zu können.
Seit der Version 4.0 (mit Windows NT) unterstützt das Programm – neben dem bereits zuvor verwendeten ANSI-Textformat (siehe auch Windows-1252) – auch Unicode mit den Zeichenkodierungen UTF-16, UTF-16 Big Endian und UTF-8.