Seite 1 von 1

Umlaute werden nach HTML Tags formatiert

Verfasst: Mittwoch 28. Februar 2018, 13:48
von cremy
Hallo zusammen,
ich bin der neue hier und habe direkt ein großes vielleicht aber auch ein kleines Anliegen.
Mit Python bin ich noch nicht sehr geübt und bekam von einem Kollegen ein Projekt geerbt.

Es wird eine SQL Datei genommen und diese wird mit Parametern via Python angereichert.
Nachdem Fileopen und filewrite werden die Umlaute in zb ä umgewandelt was aber nicht gewollt ist.
Das SQL File liegt als UTF8 vor.

Code: Alles auswählen

 # Add Spool Output to content 
    # Add an additional message that the original files were altered
    newContent  = ""
    newContent += "------------------------------------------------------------\n"
    newContent += "-- This file is altered! Should be deployed with SQL-Plus --\n"
    newContent += "------------------------------------------------------------\n"
    newContent += "\n"
    newContent += "SPOOL " + fName[:fName.index(".")] + ".spool\n"
    newContent += "ALTER SESSION SET PLSQL_OPTIMIZE_LEVEL = 1;\n"
    newContent += "SET SQLBLANKLINES ON\n"

    newContent = unicode(newContent)
    # The Application file containing pages/images/etc.
    if fName.find("f"+appID) != -1:
        consolePrint(loglevel, "Application-File found!")
        newContent += "\n"
        if appInst.find("APEX") != -1:
            consolePrint(loglevel, "Application File!")
            newContent += "DELETE WWV_FLOW_WORKSHEET_CONDITIONS where flow_id = '" + appID +"';\n"

        # Append Application data
        newContent += "\n"
        newContent += "------------------------------------------------------------\n"
        newContent += "--              Contents of Application-File              --\n"
        newContent += "------------------------------------------------------------\n"
        newContent += "\n"
        newContent += fData.decode('utf-8')
        # Replace all Exit-Statements
        newContent  = newContent.replace("exit sql.sqlcode", "EXIT 0")
        newContent  = newContent.replace("EXIT SQL.SQLCODE", "EXIT 0")
        validFile = True
    elif fName.find("DBO_"+appID) != -1:
        consolePrint(loglevel, "Database-File found!")
        newContent += generateDB(appInst, wsName, fData)
        # newContent += fData.decode('utf-8')
        validFile = True

    # Write content to file
    if validFile==True:
        f = open(fName, 'wb')
        f.write(newContent.encode('ascii', 'xmlcharrefreplace'))
        f.close()
Den Teil

Code: Alles auswählen

    # Write content to file
    if validFile==True:
        f = open(fName, 'wb')
        f.write(newContent.encode('ascii', 'xmlcharrefreplace'))
        f.close()
[/code] habe ich auch bereits auf

from HTMLParser import HTMLParser # HTMLParser

Code: Alles auswählen

  parser = HTMLParser()
f.write(parser.unescape(newContent).encode('utf-8'))  geändert ohne Erfolg
geändert ohne Erfolg.

Vielleicht hat ja von euch einer eine Idee.

Re: Umlaute werden nach HTML Tags formatiert

Verfasst: Mittwoch 28. Februar 2018, 15:57
von Sirius3
@cremy: wenn man nicht per `xmlcharrefreplace` anweist, dass alle Zeichen ab 127 durch &#xxx; ersetzt werden sollen, dann werden die auch nicht. Dazu braucht man auch keinen HTML-Parser. Was heißt daher "ohne Erfolg"? Kannst Du Beispiele geben was der genau Input und Output ist?

Statt `fName.find` benutzt man hier den in-Operator. Was ist fData oder generateDB? Irgendetwas per replace zu ersetzen sollte man immer mit Vorsicht machen, kann garantiert werden, dass der Ersetzungstext nicht in anderem Kontext auch vorkommen kann? Explizit auf True zu prüfen ist unnötig. Dateien schreibt man am besten per with-Statement:

Code: Alles auswählen

if validFile:
    with open(fName, 'wb') as output:
        output.write(newContent.encode('utf8'))

Re: Umlaute werden nach HTML Tags formatiert

Verfasst: Donnerstag 1. März 2018, 09:44
von cremy
danke für deinen code
ich habe dementsprechend umgebaut und bekomme nun als Ausgabe
Vertr��ge

Mein Input ist wie gesagt eine SQL Datei als UTF-8 diese muss von Python geöffnet werden und mit dem newcontent angereichert werden, dabei werden die Umlaute immer verändert

Es sollte als Ausgabe Verträge da stehen und nicht Vertr��ge.

Re: Umlaute werden nach HTML Tags formatiert

Verfasst: Donnerstag 1. März 2018, 09:49
von Sirius3
@cremy: Du hast irgendwo ein Encoding-Problem. Wo bekommst Du die Ausgabe? Ist dort das richtige Encoding eingestellt? In welchem Encoding liegt `fData` vor?

Re: Umlaute werden nach HTML Tags formatiert

Verfasst: Freitag 2. März 2018, 07:11
von cremy
Ich habe dir eine Pn geschickt mit dem kompletten Code.
Hier der Auszug:

fData = fileContent
newContent += fData.decode('utf-8')
# Replace all Exit-Statements
newContent = newContent.replace("exit sql.sqlcode", "EXIT 0")
newContent = newContent.replace("EXIT SQL.SQLCODE", "EXIT 0")
validFile = True
elif fName.find("DBO_"+appID) != -1:
consolePrint(loglevel, "Database-File found!")
newContent += generateDB(appInst, wsName, fData)
# newContent += fData.decode('utf-8')