AW: [Python-de] Re: Alptraum Unicode

Olaf 'Ruebezahl' Radicke olaf_rad at gmx.de
Sam Dez 27 13:08:12 CET 2003


...So, eine nacht später und etwas abgeregt...

Am Samstag 27 Dezember 2003 02:56 schrieb Uwe Schmitt:
> > die Codierung gerade eindeutig ist oder nicht. Das Leben mit Python
> >
> > > währe um einiges einfacher, wenn ein Unicode-String eine Klasse
> > > (bzw. Typ) währe.
>
> aber unicode-strings sind doch ein typ/klasse in python...


xml-string = ""
#was habe ich jetzt UNICODE oder ASCII ?

xml_string = socket_objekt.empfangen()
#was habe ich jetzt UNICODE oder ASCII ?

sql_query = patser_objekt.run(xml_string)
#was habe ich jetzt UNICODE oder ASCII ?

antwort = psql_objekt.query(sql_query)
#was habe ich jetzt UNICODE oder ASCII ?

interaktions_string = Tkinter_gui_dialog.run(antwort)
#was habe ich jetzt UNICODE oder ASCII ?


Am Samstag 27 Dezember 2003 00:40 schrieb Stefan Schwarzer:
> Sollte das blauäugig klingen, liegt es einfach daran, dass ich zu
> wenig über dein Programm weiß. ;-) Nach deiner Beschreibung vermute
> ich jedenfalls eher ein Design-Problem, und nicht so sehr, dass der
> Umgang mit Unicode in Python notwendigerweise ekelhaft sein muss.

Volgende Funktion hat ein UNICODE-Fehler produzirt:

def _projekt_report(eltern_objekt, \
                    project_title, \
                    rekursiv, \
                    mit_stammdaten_von, \
                    epoch_begin, \
                    epoch_end, \
                    ausgabeformat):
    latex_code = ""
    latex_code += "\\section{Projektziel}\n"
    if project_title != "Dachprojekt":
        latex_code += "Das Projekt ist abgeleitet von dem Projekt  \\glqq "
        test_str = ""
        latex_code += test_str.encode("Latin-1")
        eltern_projekt = db_querys.get_parent_from(eltern_objekt, 
project_title)
        latex_code += _sonderzeichen_behandlung(eltern_projekt)
        projekt_id = db_querys.get_id_from_project(eltern_objekt, 
project_title)
        latex_code += " \\grqq{} (Projekt-ID: " + str(projekt_id) + ") \n \\\\ 
\n \\\\"
    latex_code += "Das Projektziel war wie folgt formuliert: "
    projekt_ziel = db_querys.get_project_conception(eltern_objekt, 
project_title)
    latex_code += _sonderzeichen_behandlung(projekt_ziel)
    latex_code += " \n"
    #return latex_code

    dagesdatum = unix_time.Unix_Time()
    # die Tagesdoku
    dict_list = db_querys.get_docu_epoch(eltern_objekt, project_title, 
epoch_begin, epoch_end)
    if len(dict_list) > 0:
        latex_code  += "\\section{Tagesdokumentation}\n"
        for dic_tages_doku in dict_list:
            latex_code  += "\n \\subsubsection{"
            dagesdatum.set_sekunden(dic_tages_doku['datum'])
            latex_code  += dagesdatum.get_nice_string()
            latex_code  += "geschrieben von "
            mittarbeiter_id = dic_tages_doku['mittarbeiter_id']
            log_name = db_querys.get_logname(eltern_objekt, mittarbeiter_id)
            log_name = _sonderzeichen_behandlung(log_name)
            real_name = db_querys.get_realname(eltern_objekt, mittarbeiter_id)
            real_name = _sonderzeichen_behandlung(real_name)
            latex_code  += real_name + "(" + log_name + ")}\n"
            latex_code  += 
_sonderzeichen_behandlung(dic_tages_doku['tages_doku'])

    # ToDo's
    dict_list = db_querys.get_todo_epoch(eltern_objekt, project_title, 
epoch_begin, epoch_end)
    if len(dict_list) > 0:
        latex_code  += "\\section{Erledigte Aufgaben}\n"
        for dic_todo_doku in dict_list:
            latex_code  += "\n\\subsubsection{"
            dagesdatum.set_sekunden(dic_todo_doku['datum'])
            latex_code  += dagesdatum.get_nice_string()
            latex_code  += "erledigt von "
            mittarbeiter_id = dic_todo_doku['mittarbeiter_id']
            log_name = db_querys.get_logname(eltern_objekt, mittarbeiter_id)
            log_name = _sonderzeichen_behandlung(log_name)
            real_name = db_querys.get_realname(eltern_objekt, mittarbeiter_id)
            real_name = _sonderzeichen_behandlung(real_name)
            latex_code  += real_name + "(" + log_name + ")} \n"
            latex_code  += "\emph{ Zusammenfassung: }"
            latex_code  += 
_sonderzeichen_behandlung(dic_todo_doku['zusammenfassung']) + " \\\\ \n"
            latex_code  += unicode("\emph{ Erg�zung: }","latin-1")
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Hopla! wieso muste ich hier  expliziet "unicode" ?

            latex_code  += 
_sonderzeichen_behandlung(dic_todo_doku['beschreibung'])
    # Checklisten
    all_name_of_checkpoint = db_querys.get_checklist_from(eltern_objekt, 
project_title)
    if len(all_name_of_checkpoint) > 0:
        # gibt es berhaubt eine Checkliste
        latex_code  += "\\section{Checkliste(n)}\n"
        for checkpoint in all_name_of_checkpoint:
            latex_code += "\\subsection{ \glqq " + checkpoint + "\grqq{} }\n"
            latex_code += "\\begin{center} \n"
            latex_code += "\\begin{longtable}{|l|l|l|}"
            latex_code += "\\hline \n"
            latex_code += "Datum & Zeitdifferenz & Login-Name"
            latex_code += "\\\\  \\hline  \\hline \n"

            dict_list = db_querys.get_checkpoint_epoch(eltern_objekt, 
project_title, checkpoint, epoch_begin, epoch_end)

            if len(dict_list) > 0:
                # wurden Eintragungen gemacht zu dem Checkpoint
                letztes_datum = unix_time.Unix_Time()
                for dic_check_doku in dict_list:
                    mitarbeiter_id = dic_check_doku['mittarbeiter_id']
                    logname = db_querys.get_logname(eltern_objekt, 
mitarbeiter_id)
                    logname = _sonderzeichen_behandlung(logname)
                    datum = unix_time.Unix_Time()

                    datum.set_sekunden(dic_check_doku['datum'])
                    diff_time = unix_time.Unix_Time()
                    diff_time.set_sekunden(0)
                    if letztes_datum.get_sekunden_int() != 0:
                        # ist das nicht der erste eintrag
                        # rechne differenz aus
                        diff_sek = datum.get_sekunden_int() - 
letztes_datum.get_sekunden_int()
                        diff_time.set_sekunden(datum.get_sekunden_int() - 
letztes_datum.get_sekunden_int())

                    latex_code += datum.get_nice_string() + " & "
                    latex_code += diff_time.get_tag_s_m_str() + " & "
                    latex_code += logname
                    latex_code += "\\\\ \\hline  \n"
                    letztes_datum.set_sekunden(datum.get_sekunden_int())
            latex_code += "\\end{longtable} \n"
            latex_code += "\\end{center} \n"

    # Abschlussbericht
    projekt_status = db_querys.get_project_status(eltern_objekt, 
project_title)
    if projekt_status == "p":
        # ist das Projekt abgeschlossen...
        latex_code  += "\\section{Abschlussbericht}\n"
        dict_list  += db_querys.get_abschlussbericht(eltern_objekt, 
project_title)
        if len(dict_list) > 0:
            # wurden Eintragungen gemacht zu dem Checkpoint
            for abschluss_dict in dict_list:
                latex_code  += "\\emph{Geschrien von"
                mitarbeiter_id = abschluss_dict['mittarbeiter_id']
                logname = db_querys.get_logname(eltern_objekt, 
mittarbeiter_id)
                logname = _sonderzeichen_behandlung(logname)
                real_name = db_querys.get_realname(eltern_objekt, 
mittarbeiter_id)
                real_name = _sonderzeichen_behandlung(real_name)
                latex_code  += real_name + " (" + logname + ") am "
                datum = unix_time.Unix_Time()
                datum.set_sekunden(abschluss_dict['datum'])
                latex_code  += datum.get_nice_string() + "} \\\\ \n"
                latex_code  += 
_sonderzeichen_behandlung(abschluss_dict['bericht'])


    return latex_code.encode("Latin-1")
#^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# und hier muste ich wieder "encode" mit das Risulat eindeutig
# für den entfänger ist.

########################################################
#################### der Empfänger: ######################

def get_report( eltern_objekt, \
                project_title, \
                rekursiv, \
                mit_stammdaten_von, \
                epoch_begin, \
                epoch_end, \
                ausgabeformat):

    conf = eltern_objekt.get_conf()

    report_begin = unix_time.Unix_Time()
    report_begin.set_sekunden(epoch_begin)
    report_ende = unix_time.Unix_Time()
    report_ende.set_sekunden(epoch_end)

    if _ist_zugriff_von_ip_erlaubt(eltern_objekt) == 0:
         return "<error>keine ausreichende Ber�htigung!</error>"

# Vorspann
    latex_code = "% Diese datei wurde automatisch von GNUSWork generiert \n\n"

    latex_code = "\\documentclass[10pt,a4paper]{article}\n"
    latex_code += "\\usepackage[latin1]{inputenc}\n"
    latex_code += "\\usepackage{german}\n"
    latex_code += "\\usepackage{pslatex}\n"
    latex_code += "\\usepackage{rotating}\n"
    latex_code += "\\usepackage{longtable}\n"
    latex_code += "\\usepackage[T1]{fontenc}\n\n"
    latex_code += "\\usepackage{booktabs}\n"
    latex_code += "\\usepackage{pst-all}\n"
    latex_code += "\\usepackage{multido}\n"
    latex_code += "\\setlength{\\parindent}{0pt}\n"
    latex_code += "\\begin{document}\n"

# Kopf
    latex_code += "\\title{\\textbf{"
    latex_code += _sonderzeichen_behandlung(project_title)
    latex_code += "} \\\\ \n \\normalsize (Report beginnt: "
    latex_code += report_begin.get_nice_string()
    latex_code += "  Report ende: " + report_ende.get_nice_string()
    latex_code += " )  }\n"
    latex_code += "\\author{"
    einrichtungsadresse = db_querys.get_headproject_addess(eltern_objekt)
    latex_code += _sonderzeichen_behandlung(einrichtungsadresse)
    latex_code += "}\n"
    latex_code += "\\maketitle\n"
    latex_code += "\\tableofcontents\n"
    latex_code += "\\newpage\n"
# Haubtteil



# stammdaten

    if mit_stammdaten_von != "":
        latex_code += "\\section{Stammdaten}\n"
        latex_code += "\\begin{longtable}{p{8cm} }\n"
        tab_list = db_querys.get_reiter_from_stammdaten(eltern_objekt, 
mit_stammdaten_von)

        for tab in tab_list:

            reiter = _sonderzeichen_behandlung(tab)
            data = db_querys.get_daten_from_stammdaten(eltern_objekt, 
mit_stammdaten_von, tab)
            blatt = _sonderzeichen_behandlung(data)
            latex_code += "\\toprule \n"
            latex_code += "\\specialrule{1pt}{1pt}{1pt} \n"
            latex_code += "\\textbf{ "
            latex_code += reiter + " }"
            latex_code += "\\\\ \\midrule \n"
            latex_code += blatt + " \\\\ \n "
            print"#################### reiter/blatt: ",reiter,"/",blatt
        latex_code += "\\end{longtable} \n"


    print"erstelle Haubtprojekt "
    if rekursiv == 1:
        latex_code += "\n \\part{Haubtprojekt: " + project_title + "} \n"

    latex_code += _projekt_report(  eltern_objekt, \
                                    project_title, \
                                    rekursiv, \
                                    mit_stammdaten_von, \
                                    epoch_begin, \
                                    epoch_end, \
                                    ausgabeformat)

# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Wieso zur Höle ist "latex_code" an dieser stell kein UNICODE?!