Olaf 'Ruebezahl' Radicke wrote:
xml-string = "" #was habe ich jetzt UNICODE oder ASCII ?
Weder noch: xml-string ist vom <type 'str'>, also ein Byte-String. 'ASCII-Strings' gibts in Python nicht.
xml_string = socket_objekt.empfangen() #was habe ich jetzt UNICODE oder ASCII ?
Byte-String.
sql_query = patser_objekt.run(xml_string) #was habe ich jetzt UNICODE oder ASCII ?
Hängt von patser_objekt ab. Wenn Du nicht sicher bist und es nicht dokumentiert ist, solltest Du assert isinstance(sql_query, unicode) schreiben.
antwort = psql_objekt.query(sql_query) #was habe ich jetzt UNICODE oder ASCII ?
Genauso.
interaktions_string = Tkinter_gui_dialog.run(antwort) #was habe ich jetzt UNICODE oder ASCII ?
Wenn die Zeichen ausschliesslich ASCII sind, hast Du einen Byte-String, ansonsten einen Unicode-String. Wenn Du immer einen Unicode-String haben willst, solltest Du interaktions_string = unicode(interaktions_string) schreiben.
latex_code += test_str.encode("Latin-1")
Hier eine fragliche Design-Entscheidung: latex_code soll offenbar Latin-1 kodiert sein. Wenn man den String inkrementell aufbaut, muss man dann sicherstellen, dass jeder Teil auch Latin-1 ist. Alternativ kannst Du latex_code als Unicode-String aufbauen, und die Sonderzeichenbehandlung ganz am Ende durchführen. Für das inkrementelle Aufbauen empfehle ich, nicht += zu verwenden, sondern eine Liste. Du kannst am Ende überprüfen, ob alle Elemente der Liste wirklich Byte-Strings sind, bevor Du sie verkettest (per "".join(liste))
dagesdatum.set_sekunden(dic_tages_doku['datum']) latex_code += dagesdatum.get_nice_string()
Potentiell ein Unicode-String. Da Du die Absicht hast, dass latex_code ein byte_string wird, solltest Du sicherstellen, dass es auch einer ist: dagesdatum = dagesdatum.get_nice_string() assert isinstance(dagesdatum, str) latex_code += dagesdatum
latex_code += unicode("\emph{ Erg�änzung: }","latin-1") #^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # Hopla! wieso muste ich hier expliziet "unicode" ?
Das muss Dich stutzig machen. Ein String, den Du addiert hast, ist offenbar ein Unicode-String. Du solltest herausfinden, welcher das ist, und ihn dann in Latin-1 konvertieren.
latex_code += _sonderzeichen_behandlung(dic_todo_doku['beschreibung'])
Und hier kracht's dann. Soweit ich verstanden habe, gibt _sonderzeichen_behandlung einen Byte-String zurück, während latex_code inzwischen ein Unicode-String ist. Damit wird das system default encoding verwendet, um das Ergebnis von _sonderzeichen_behandlung in Unicode zu konvertieren. Falls Du das system default encoding nicht geändert hast (was Du *nie* tun solltest), gibt diese Operation einen UnicodeError, sowie die Beschreibung wirklich Sonderzeichen enthält.
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ # Wieso zur Höle ist "latex_code" an dieser stell kein UNICODE?!
Da habe ich was nicht verstanden: latex_code sollte doch ein Byte-String sein, kein Unicode-String???? Ciao, Martin _______________________________________________ Python-de maillist - Python-de@python.net http://python.net/mailman/listinfo/python-de