Excel Dateien auslesen: 'ascii' codec can't encode character

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Schlangenbändiger
User
Beiträge: 2
Registriert: Samstag 9. Mai 2015, 21:05

Hey bin neu hier und komme direkt zur Sache:
Wir machen in der Schule grad ein Projekt in dem wir aus einer Excel-Datei mit Python Zellen auslesen und diese in eine Html-Website schreiben und beim ausführen des Programms bekomme ich bei folgender Zeile die Fehlermeldung: TypeError: expected a character buffer object
Zeile: ziel.write(sheet.Cells(zeile,spalte).Value)

Dies liegt wie ich herausgefunden habe an dem Typ der Zelle. Deswegen habe ich versucht diese umzuwandeln:
ziel.write(str(sheet.Cells(zeile,spalte).Value))
Doch dies gab mir wiederum folgende Fehlermeldung: UnicodeEncodeError: 'ascii' codec can't encode character u'\xdf' in position 13: ordinal not in range(128)

ich bin ratlos und hoffe auf schnelle Antwort :?:

Aaron
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Schlangenbändiger: Wie hast Du denn bisher HTML geschrieben? Jedenfalls nicht mit Hilfe einer Templateengine. Deshalb mußt Du Dich um einiges selbst kümmern. Für das Problem solltest Du Dich mit Character-Encoding auseinandersetzen. Du mußt die Excel-Text-Zellen in das selbe Encoding konvertieren wie Du in der HTML-Datei angegeben hast.
Schlangenbändiger
User
Beiträge: 2
Registriert: Samstag 9. Mai 2015, 21:05

Danke für die schnelle Antwort habs gestern aber nicht mehr gesehen. Habe die html-Datei in utf-8 kodiert und jetzt das hier ausprobiert:
ziel.write(sheet.Cells(zeile,spalte).Value.encoding("utf-8"))
Darauf folgt die Fehlermeldung: 'unicode' object has no attribute 'encoding'
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Schlangenbändiger: Objekte haben ja auch in Python nicht immer die Methoden, die so ausprobiert werden, sondern es gibt eine Dokumention, da steht drin, welche sie tatsächlich haben.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sirius3 hat geschrieben:Für das Problem solltest Du Dich mit Character-Encoding auseinandersetzen. Du mußt die Excel-Text-Zellen in das selbe Encoding konvertieren wie Du in der HTML-Datei angegeben hast.
Für das eigentliche Problem muss er nur ein Encoding wählen, welches die Zeichen des Excell-Dokuments repräsentieren kann. Ob das nun mit dem Encoding in der Zieldatei übereinstimmt, ist letztlich unerheblich für das Vermeiden des Fehlers - sinnvoller Weise will man im Zieldokument natürlich keinen Byte-Müll stehen haben und sollte innerhalb einer HTML-Datei keine Encodings mischen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Hyperion: letzlich ist es egal, ob die Zeichen repräsentiert werden können, da man mit "ignore" ja auch ungemappte Zeichen in lustige ? umwandeln kann. Trotzdem löst das nicht das Problem sondern nur die Fehlermeldung verschwindet.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Sirius3 hat geschrieben:@Hyperion: letzlich ist es egal, ob die Zeichen repräsentiert werden können, da man mit "ignore" ja auch ungemappte Zeichen in lustige ? umwandeln kann.
Stimmt. Das wäre eine alternative Lösung.
Sirius3 hat geschrieben: Trotzdem löst das nicht das Problem sondern nur die Fehlermeldung verschwindet.
Und genau der Fehler *ist* ja das Problem ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Hyperion: der Fehler ist ein Symptom des Problems :P. Aber da der OP ja geschrieben hat, dass er utf8 als HTML-Encoding eingestellt hat, ist das Problem so oder so gelöst.
Antworten