Sonderzeichen Codierung mit fstream, stingstream und string
-
Abend...
Ich habe folgendes Problem:
Ich lese aus einer UTF-8 txt-Datei einen stringstream aus, den ich dann als c_str einem string übergebe und dann eine Ersetzung und Analyse machen will. Es geht um Mono-, Bi- und Tri-Gramme.
Ich will alle Zeichen bis auf 'a' bis 'z' und 'ä','ö','ü' und 'ß' ersetzen.
Das Problem ist nur, wenn ich nur "isalpha()" benutze funktioniert das auch, sobald ich aber zusätzlich nach den 4 Sonderzeichen frage, bekomme ich alle im Text enthaltenen Sonderzeichen.string input(); string filename = "blubb.txt"; stringstream ss; ss<<ifstream(filename.c_str()).rdbuf(); input=ss.str(); unsigned int i = 0; while(input[i]){ input[i] = tolower(input[i]); if(!(isalpha(input[i]))){ input[i] = ' '; } ++i; }Die Abfrage nach den Sonderzeichen habe ich bewusst weggelassen, da ich über verschiedene Schreibweisen gestolpert bin (zB hex). Und mir nun garnicht mehr sicher bin.
und zum guten Schluss noch einpaar angaben:
OS: OS X.5
IDE: eclipse c++ mit g++
file encoding: UTF-8
terminal: UTF-8
compiler encoding: UTF-8//encodings kann ich auch gerne umstellen....
-
std::string funktioniert nicht richtig mit UTF-8 der [] Operator kann dir da nicht immer das richtige Zeichen geben.
-
Du könntest den Text mit irgendeiner Bibliothek nach UTF-32 konvertieren und in eine Normalform bringen (am Besten NFKC). Dann kannst du die Zeichen einzeln durchgehen und entsprechend mit den Unicode-Zeichen für ö, ü, ... vergleichen.
Lesenswertes: Forum-Artikel: Einführung in Codepages und Unicode, wiki Unicode, wiki Unicode Normalization.
-
vielen dank!! aber heut passiert bei mir nix mehr
