Seite 1 von 1

binäre Sonderzeichen aus XML String entfernen

Verfasst: 10. September 2015 12:54
von anmae
Hallo zusammen,

ich habe einen XML String, welcher ein ungültiges binäres Zeichen enthält. Dies möchte ich entfernen, bevor ich den QXmlStreamReader mit dem String füttere. Dazu nehme ich QRegExp.
Hier mein Code:

Code: Alles auswählen

void parseXML(const char *xml_stream) {
  QRegExp rx("[^a-zA-Z0-9 \.,\-_\r\n\t'\"]" );
  QString qs(xml_stream);
  qs.replace(rx,"");
...
Was mich wundert: nach dem RegExp sollten normalerweise die <> Zeichen aus dem XML weg sein (habe ich zum Test so eingebaut) - das ist aber nicht so. Diese Zeichen sind noch drin. Das binäre Zeichen ebenfalls.
Was ist an meiner RegExp falsch?

Vielen Dank

Re: binäre Sonderzeichen aus XML String entfernen

Verfasst: 10. September 2015 14:18
von anmae
Frage zurück - es funktioniert so weit. Ich hatte weiter unten im Code den XML Parser erneut mit dem falschen String initialisiert.
Mich wundert trotzdem, dass <> noch im String enthalten war...

Aber: es ist etwas unglücklich, um ein binäres Zeichen (im meinem Fall war es 03 (also EOF) ) aus dem String zu löschen. Kann mir jemand helfen, dass ich alle lesbaren Zeichen (auch andere Sprachen wie Chinesisch) zulasse, aber binäre Zeichen bzw. Steuerbefehle lösche. Gibt es da etwas besseres als RegExp?

Danke

Re: binäre Sonderzeichen aus XML String entfernen

Verfasst: 14. September 2015 15:49
von anmae
Die <> Zeichen haben sich mittlerweile geklärt. Grund war, dass ich \ doppelt auskommentieren muss (Einmal für den C String und einmal für die RegEx).
Nun sieht meine funktionierende RegEx so aus:

Code: Alles auswählen

QRegExp rx("[^a-zA-Z0-9 \\\\\\.,\\-_\\r\\n\\t'\"\\<\\>\\*;/\\~\\+#\\$\\=\\:()]" );
Damit filtere ich aber mit Sicherheit auch sinnvolle Zeichen heraus, welche ich derzeit noch nicht beachte. Im Prinzip wird es wahrscheinlich genügen, alle Zeichen < 0xa zu filtern!? Wenn ja, wie?

Ich habe es einmal damit versucht:

Code: Alles auswählen

 QString(xml_stream).toUtf8()
Das löst das Problem leider nicht - Steuerzeichen werden nicht herausgefiltert.

Re: binäre Sonderzeichen aus XML String entfernen

Verfasst: 14. September 2015 19:15
von Christian81
Durch den QString in einer Loop durchlaufen und alles was < 0x08 ist rausfiltern.