Sonderzeichen aus xml Datei umwandeln
-
Hallo
Ich hab da ein kleines Problem
Ich hab eine XML Datei, die ich auslese und bestimmte Sachen auf der Konsole wiedergeben muss(schulprojekt).
Das Auslesen und die Wiedergabe klappt alles super, nur hat der Text natürlich deutsche Umlaute und bei denen kommt auf der Konsole nur sch... rausZum Auslesen der Datei verwend ich TinyXML.
So ich bin jetzt mal hergeganegn und hab mir ne Funktion geschrieben, die mir die Strings die ich auslese nach den Umlauten durchsucht
if ((strtext.find("Ä")>0) && (strtext.find("Ä")<= strtext.length()))
strtext.replace(strtext.find("Ä"), 1, "Ae", 2);usw für alle Umlaute.
Doch irgendwie interressier es mein Programm überhaupt nicht, dass ich da was suche.
Meine Vermutung ist das das es im text der xml datei das zeichen net findet ?Hat irgend wer nen Denkanstoß für mich
Danke schon mal
-
Zeichenkodiering? Das ist entscheident. In welchem Format ist die XML-Datei gespeichert? UTF-8? Latin-1? Wie sieht es mit deinem Programm aus? Mit welcher Kodierung arbeitet das? Die Konsole?
Ganz so einfach ist das leider nicht.
-
Also die XML Datei ist utf-8 kodiert und Ich benutze den Boarland 6.0 und der arbeitet soweit es mir bekannt ist mit ascii
-
Naja, schau doch mal in die ASCII-Tabelle. Da wirst du keine deutschen Umlaut finden, weil das eben die Tabelle für den _American_ Standard Code for Information Interchange ist und bei denen gibt's keine Umlaute.
Mir ist allerdings trotzdem nicht so ganz klar, was du damit meinst, wenn du sagst, Borland 6.0 benutzt ASCII. Ansonsten wär's auch ganz interessant zu wissen, wie diese Suchfunktion genau aussieht, die du da benutzen willst.
Also, erklär dich mal
~moagnus
-
Hi,
Dein Problem wird wohl nicht die xml sein sondern die console, die kann nämlich keine Umlaute darstellen.
Bsp.:
Um auf der Konsole ein Ä auszugeben musst du das schreiben:cout << "\x8E" << endl;
In meinem Beispiel wurde die Hexdezimal zahl von Ä benutzt, wie du die rausbekommst überlasse ich dir damit du auch noch was zu tun hast.
MFG ReduX
-
ReduX schrieb:
Hi,
Dein Problem wird wohl nicht die xml sein sondern die console, die kann nämlich keine Umlaute darstellen.
Bsp.:
Um auf der Konsole ein Ä auszugeben musst du das schreiben:cout << "\x8E" << endl;
In meinem Beispiel wurde die Hexdezimal zahl von Ä benutzt, wie du die rausbekommst überlasse ich dir damit du auch noch was zu tun hast.
MFG ReduX
Hallo,
danke für den Hinweis. Bei mir funktionert's.
Ψ
-
Hi danke schon mal für die Antworten
Also mein Problem liegt nicht darin das auszugen sondern es zu finden
Hier mal mein ganzer code
#include <iostream>
#include <string>
#include <tinyxml.cpp>
#include <tinyxml.h>
#include <tinystr.h>
#include <tinyxmlerror.cpp>
#include <tinyxmlparser.cpp>
#include <tinystr.cpp>
#include <tinystr.h>using namespace std;
void umlautAusgabe(const char* text)
{
string strtext;
strtext = text;if ((strtext.find("\x8E")>0) && (strtext.find("\x8E")<= strtext.length()))
strtext.replace(strtext.find("\x8E"), 1, "Ae", 2);if ((strtext.find("\x84")>0) && (strtext.find("\x84")<= strtext.length()))
strtext.replace(strtext.find("\x84"), 2, "ae", 2);if ((strtext.find("\x99")>0) && (strtext.find("\x99")<= strtext.length()))
strtext.replace(strtext.find("\x99"), 1, "Oe", 2);if ((strtext.find("\x94")>0) && (strtext.find("\x94")<= strtext.length()))
strtext.replace(strtext.find("\x94"), 1, "oe", 2);if ((strtext.find("\x9A")>0) && (strtext.find("\x9A")<= strtext.length()))
strtext.replace(strtext.find("\x9A"), 1, "Ue", 2);if ((strtext.find("\x81")>0) && (strtext.find("\x81")<= strtext.length()))
strtext.replace(strtext.find("\x81"), 1, "ue", 2);text;
cout << strtext << endl;
}int main(int argc, char* argv[])
{
std::string dTag,dMonat,dSt;
const char* suchtext;
TiXmlElement* ebene2;cout << "Programm zum Auslesen der Losung des Tages aus dem Jahr 2008" << endl;
cout << endl;
cout << "Bitte Geben Sie den Monat ein(2 stellig 01,02,03,..) usw.: ";
cin >> dMonat;
cout << endl;
cout << "Bitte geben Sie den Tag ein(2 stellig 01,02,03,..) usw.: ";
cin >> dTag;dSt = dTag + dMonat + "TEST";
TiXmlDocument doc( "Losungen.xml" );
doc.LoadFile();dSt = "2008-" + dMonat + "-" + dTag + "T00:00:00";
cout << "Suche nach: " << dSt << endl;
cout<<endl;TiXmlElement* root = doc.FirstChildElement();
TiXmlElement* ebene1 = root->FirstChildElement();do
{
ebene2 = ebene1->FirstChildElement();
if ( !(strcmp(ebene2->GetText(),dSt.c_str())))
{
ebene2 = ebene2->NextSiblingElement("Wtag");
cout << ebene2->GetText() << ",den " << dTag << "." << dMonat << ".2008" << endl;ebene2 = ebene2->NextSiblingElement("Losungstext");
umlautAusgabe(ebene2->GetText());ebene2 = ebene2->NextSiblingElement("Losungsvers");
umlautAusgabe(ebene2->GetText());ebene2 = ebene2->NextSiblingElement("Lehrtext");
umlautAusgabe(ebene2->GetText());ebene2 = ebene2->NextSiblingElement("Lehrtextvers");
umlautAusgabe(ebene2->GetText());
}
ebene1 = ebene1->NextSiblingElement();
}
while(ebene1);getchar();
getchar();
return 0;}
DAs auslesen der datei und wiedergabe in der konsole geht super gut nur enthält der text auch sonderzeichen und die gibt die konsole in nem zeichenwuscht aus
Hier mal die Grunddatei die ich auslesen muß www.losung.de/download/download.php
(Schhulübung)
Meine frage ist wie ich die sonderzeichen da rauslesen kann und ändern (muß in ae ue usw ändern)
-
Wäre das Umstellen der Konsole auf UTF8 nicht einfacher?
-
Na ja warscheinlich schon mein dozent will aber das ich das auslese und umwandle leider
-
blade1977 schrieb:
Hi danke schon mal für die Antworten
Also mein Problem liegt nicht darin das auszugen sondern es zu finden
In UTF-8 nehmen die Umlaute 2 Byte ein. Wenn die XML-Datei UTF-8 ist musst du nach dem UTF-8 'Ä' suchen Das wird dann zu "\xc3\x84"
-
-
Das ist MFC oder?
Dann bringt's dem OP wenig - MFC gibt's für Borland nicht IMO