Sonderzeichen in Movieviewer und Movieinfo
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24
Sonderzeichen in Movieviewer und Movieinfo
Ich habe mir heute das c't magazin aufgenommen und angesehen. Dabei fiel mir auf, dass im Movieviewer und in der Movieinfo die Umlaute leider codiert dargestellt werden. ' wird als ' und & als & angezeigt. Könnte sich das mal bitte jemand ansehen und fixen, der weiß, an welchen Stellen man drehen müsste?
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24
Re: Sonderzeichen in Movieviewer und Movieinfo
Ich habe mal etwas weiter geforscht. Der Fehler steckt in movieinfo.cpp. XML ist dort sehr "interessant" implementiert. Ich habe aber vermutlich die Stellen gefunden, an denen die Sonderzeichen <, >, &, " und ' maskiert und unmaskiert werden müssen.
Man müsste wohl die Zeile
_xml_text_ += _tag_content_; \
in so etwas wie
_xml_text_ += encodeSpecialChars(_tag_content_); \
ändern und nach der Zeile
_dest_.append(&_text_[pos_prev],_pos_ - pos_prev );\
so etwas wie
_dest_ = decodeSpecialChars(_dest_);\
einfügen.
Jemand, der mehr Ahnung von C++ hat als ich, bekommt das vermutlich relativ schnell umgesetzt und kann meine Pseudofunktionen mit Leben füllen. Vielleicht gibt es ja auch schon vorgefertigte Funktionen, die ich nicht kenne. Könnte sich bitte jemand erbarmen?
Code: Alles auswählen
...
#define XML_ADD_TAG_STRING(_xml_text_,_tag_name_,_tag_content_){ \
_xml_text_ += "\t\t<"_tag_name_">"; \
_xml_text_ += _tag_content_; \
_xml_text_ += "</"_tag_name_">\n";}
...
#define GET_XML_DATA_STRING(_text_,_pos_,_tag_,_dest_)\
if(strncmp(&_text_[_pos_],_tag_,sizeof(_tag_)-1) == 0)\
{\
_pos_ += sizeof(_tag_) ;\
int pos_prev = _pos_;\
while(_pos_ < bytes && _text_[_pos_] != '<' ) _pos_++;\
_dest_ = "";\
_dest_.append(&_text_[pos_prev],_pos_ - pos_prev );\
_pos_ += sizeof(_tag_);\
continue;\
}
...
_xml_text_ += _tag_content_; \
in so etwas wie
_xml_text_ += encodeSpecialChars(_tag_content_); \
ändern und nach der Zeile
_dest_.append(&_text_[pos_prev],_pos_ - pos_prev );\
so etwas wie
_dest_ = decodeSpecialChars(_dest_);\
einfügen.
Jemand, der mehr Ahnung von C++ hat als ich, bekommt das vermutlich relativ schnell umgesetzt und kann meine Pseudofunktionen mit Leben füllen. Vielleicht gibt es ja auch schon vorgefertigte Funktionen, die ich nicht kenne. Könnte sich bitte jemand erbarmen?
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24
Re: Sonderzeichen in Movieviewer und Movieinfo
Ich habe nun selbst eine funktionierende Umwandlung der Sonderzeichen <, >, &, " und ' für die Movieinfo programmiert. Der Patch ist getestet und funktioniert bei mir. Es wäre gut, wenn ihn noch jemand anders testen könnte. Falls niemand eine bessere Lösung parat hat, kann mein Patch ins CVS wandern.
Link entfernt
Link entfernt
Zuletzt geändert von Gaucho316 am Sonntag 5. April 2009, 17:28, insgesamt 1-mal geändert.
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24
Re: Sonderzeichen in Movieviewer und Movieinfo
Ich habe meinen Patch noch ein wenig erweitert, so dass nun in allen Strings in der Movieinfo die Sonderzeichen <, >, &, " und ' en- bzw. dekodiert werden. In der vorigen Version fehlte das noch für die Audio-PID-Namen und die Bookmark-Bezeichnungen. Der Patch ist wie immer getestet und scheint zu funktionieren.
Link entfernt
Link entfernt
Zuletzt geändert von Gaucho316 am Montag 13. April 2009, 15:17, insgesamt 1-mal geändert.
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Re: Sonderzeichen in Movieviewer und Movieinfo
Die Änderungen im vcrcontrol.cpp führen IMHO dazu, dass das XML nicht mehr gültig ist. (Nicht, dass ich XML dafür für sinnvoll halte oder auch nur entfent mag, aber wenn XML, dann bitte gültiges XML )
Edit: ich sehe, dass du es woanders konvertierst. Aber die Frage ist, warum es vorher nicht funktioniert hat. Und warum du die ZapitTools::UTF8_to_UTF8XML() etc. noch mal neu erfinden musst. Funktioniert die original nicht?
Edit: ich sehe, dass du es woanders konvertierst. Aber die Frage ist, warum es vorher nicht funktioniert hat. Und warum du die ZapitTools::UTF8_to_UTF8XML() etc. noch mal neu erfinden musst. Funktioniert die original nicht?
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24
Re: Sonderzeichen in Movieviewer und Movieinfo
Ganz einfach. Es wurden zwar bei der Aufnahme die Sonderzeichen konvertiert, dann aber nie wieder zurück konvertiert. So stand dann z.B. im Movieviewer statt "c't magazin" eben "c't magazin", was wirklich ziemlich bescheiden aussieht.seife hat geschrieben:ich sehe, dass du es woanders konvertierst. Aber die Frage ist, warum es vorher nicht funktioniert hat.
Doch, natürlich funktioniert die. Man kann die auch anstelle von "encodeXmlSpecialChars" nutzen. Allerdings gibt es, soweit ich das gesehen habe, noch keine Dekodierfunktion. Da habe ich mir gedacht, dass ich dann auch gleich beide Funktionen neu erfinden kann. Das zu ändern, stellt natürlich kein Problem dar.seife hat geschrieben:Und warum du die ZapitTools::UTF8_to_UTF8XML() etc. noch mal neu erfinden musst. Funktioniert die original nicht?
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24
Re: Sonderzeichen in Movieviewer und Movieinfo
Spricht außer seifes Einwand noch etwas dagegen, meinen Patch ins CVS einzuchecken? Wenn es denn wirklich unbedingt sein muss, dann kann ich natürlich "encodeXmlSpecialChars()" noch durch "ZapitTools::UTF8_to_UTF8XML()" ersetzen.
-
- CDK-Experte
- Beiträge: 4335
- Registriert: Donnerstag 3. April 2008, 14:05
Re: Sonderzeichen in Movieviewer und Movieinfo
Ist dieser Einwand noch gültig?seife hat geschrieben:Die Änderungen im vcrcontrol.cpp führen IMHO dazu, dass das XML nicht mehr gültig ist.
Das wäre gut, der Code muss nicht größer sein als nötig.Gaucho316 hat geschrieben:kann ich natürlich "encodeXmlSpecialChars()" noch durch "ZapitTools::UTF8_to_UTF8XML()" ersetzen.
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24
Re: Sonderzeichen in Movieviewer und Movieinfo
Nein. Ich habe die Konvertierung der Sonderzeichen nur verlagert, nämlich in die Klasse "CMovieInfo", so dass die Konvertierung immer dann stattfindet, wenn es sein muss und nicht mehr nur bei der Aufnahme.rhabarber1848 hat geschrieben:Ist dieser Einwand noch gültig?seife hat geschrieben:Die Änderungen im vcrcontrol.cpp führen IMHO dazu, dass das XML nicht mehr gültig ist.
Ich nutze nun für die Konvertierung "ZapitTools::UTF8_to_UTF8XML()". Ansonsten ist der Code gleich geblieben.
Link entfernt
Zuletzt geändert von Gaucho316 am Sonntag 19. April 2009, 15:20, insgesamt 1-mal geändert.
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24
Re: Sonderzeichen in Movieviewer und Movieinfo
Wie wäre es nun mit Einchecken?
-
- CDK-Experte
- Beiträge: 4335
- Registriert: Donnerstag 3. April 2008, 14:05
Re: Sonderzeichen in Movieviewer und Movieinfo
Ich warte noch auf die Antwort von seife.
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24
-
- Developer
- Beiträge: 4189
- Registriert: Sonntag 2. November 2003, 12:36
Re: Sonderzeichen in Movieviewer und Movieinfo
Wenn es die Logik nicht ändert, sondern die Konvertierung nur an anderer Stelle erfolgt, dann ist das in Ordnung, das war mir damals aus dem reinen diff nicht ganz ersichtlich (nicht alles, was ich an einem Patch zu kritisieren habe, ist immer hieb- und stichfest, da ich oft nur den diff anschaue und da eben manchmal das "grosse Bild" nicht rüber kommt.
=> rein damit
Wenn wir an anderer Stelle auch noch ähnlich unescapen müssen, dann könnte man überlegen, ob man's in die zapittools einbaut, aber das kann man dann immer noch machen.
=> rein damit
Wenn wir an anderer Stelle auch noch ähnlich unescapen müssen, dann könnte man überlegen, ob man's in die zapittools einbaut, aber das kann man dann immer noch machen.
-
- CDK-Experte
- Beiträge: 4335
- Registriert: Donnerstag 3. April 2008, 14:05
Re: Sonderzeichen in Movieviewer und Movieinfo
erledigtseife hat geschrieben:=> rein damit
-
- Contributor
- Beiträge: 1688
- Registriert: Donnerstag 17. Februar 2005, 20:24