Umlaute und QDomDocument

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Hallo zusammen,

ich komm nicht drauf wie ich eine Eingaben mit Umlauten sauber in mein XML schreiben kann:

Anbei ein lauffähigen Schnippsel der mein Problem verdeutlicht.

Code: Alles auswählen

# -*- coding: UTF-8 -*-
from __future__ import unicode_literals

from PyQt4.Qt import Qt
from PyQt4.QtGui import (QProgressBar, QSpinBox, 
                         QDialog, QApplication,
                         QMainWindow, QLineEdit,
                         QRegExpValidator, QLabel,
                         QHBoxLayout, QWidget, 
                         QInputDialog, QCommandLinkButton,
                         QTextEdit, QPushButton,
                         QFileDialog)

from PyQt4.QtCore import (QProcess, SIGNAL,
                          QString,QStringList,
                          QRegExp, QVariant)
from PyQt4.QtXml import QDomDocument
import sys


class Dialog(QInputDialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)

class Test(QMainWindow):

    def __init__(self, parent = None):
        super(Test, self).__init__(parent)
        self.widget = QWidget()
        self.layout = QHBoxLayout(self.widget)
        self.setCentralWidget(self.widget)
        self.textEdit = QTextEdit(self)
        self.label = QLabel(self)
        self.pushButton = QPushButton(u"Eingabe", self)
        self.layout.addWidget(self.pushButton)
        self.layout.addWidget(self.label)
        self.layout.addWidget(self.textEdit)
        self.connect(self.pushButton, SIGNAL(u"released()"), self.check)

    def check(self):
        item, ok = QInputDialog.getText(self, u"Eingabe", u"Eingabe")
        # self.fileOpenDialog = QFileDialog(self)
        # self.fileOpenDialog.exec_()
        # for item in self.fileOpenDialog.selectedFiles():
        self.textEdit.setPlainText(self.newScenarioXml(item))
            
    def newScenarioXml(self, name):
        xmlString = u"<?xml version='1.0' encoding='UTF-8'?> \
                    <!DOCTYPE TEST> \
                    <TEST VERSION='1.0'> \
                    <scenario name='%s' activTab=''> \
                    <tab name='tab_1'></tab> \
                    <tab name='tab_2'></tab> \
                    </scenario> \
                    </TEST>" % name
        dom = QDomDocument()
        print dom.setContent(xmlString)
        return dom.toString(1)
            
if __name__ == '__main__':
    app = QApplication(sys.argv)
    t = Test()
    t.show()
    app.exec_()

Wo muss ich drehen das die Umlaute sauber verarbeitet werden ?

Grüße
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Z.B. so:

Code: Alles auswählen

dom.setContent(QString(xmlString))
#             ^^^^^
An dem Script ist jedoch so einiges merkwürdig.

Wieso bindest Du das ein

Code: Alles auswählen

from __future__ import unicode_literals
verwendest dann aber wieder explizite Unicode-Literale?

Code: Alles auswählen

u"""
foo bar
"""
Das ist doch wenig sinnvoll.

Außerdem würde ich die "neue" Methode für das connecten von Signals und Slots nutzen:

Code: Alles auswählen

self.pushButton.released.connect(self.check)
Wieso eigentlich "released"? Wieso nicht "clicked"?

Ansonsten ist es ein wenig merkwürdig, wieso Du eine XML-Lib verwendest, die aber mit handgetippten XML fütterst - aber evtl. war das ja nur zu Demo-Zwecken!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

@Hyperion
warum ich all die redundanten Sachen gemacht hab wie

Code: Alles auswählen

from __future__ import unicode_literals
# sowie
u"das"
#sowas
ist in der tat so weil es sich um ein reines Testskriptchen handelt und ich wild rum probiert habe um dem XML ein ü für ein ü zu verkaufen.

Warum ich die "alte Schule" Verwendung der connects mache ist weil ich das in dem Programm so angefangen habe und es bisher nicht geändert habe und es entweder komplett ändere oder so lassen möchte um nicht zwei unterschiedliche Arten von connects in einem Quellecode zuhaben. Ich weiss das es die neue Methode gibt.
Wieso eigentlich "released"? Wieso nicht "clicked"?
Keinen Grund. Das ist ein schnell zusammen gefrickeltes Beispiel um mein eigentliches Problem zu zeigen. Warum über den Dialog eingegebene Umlaute nicht sauber im XML landen.
ichisich
User
Beiträge: 134
Registriert: Freitag 1. Januar 2010, 11:52

Bei dem lauter in Fragestellen meins Beispiels hab ich fast deine Lösung überlesen.

Danke auf alle Fälle.
Antworten