Text Codierung in C++
-
Hallo!
Bekomme von einem Eingabefeld der GUI (FLTK, Fl_Input) die Umlaute falsch geliefert.
Statt 'Ä' bekomme ich 'Ã' '-'. Ähnlich für andere Umlaute.
Kenn mich bei Text Codierungen nicht so aus, aber ich nehme an es handelt sich um UTF8. Letztlich möchte ich einen ganz normalen std::string damit befüllen.Hab mir schnell eine Funktion zum Korrigieren eines Textes gebastelt (siehe unten).
Frage: gibts dafür was fertiges in der STL oder bei boost zu finden?
void Umlaute(std::string& txt) { std::string tmp; for(size_t i=0;!txt.empty() && i<txt.size()-1;++i) { const char curr=txt[i]; const char next=txt[i+1]; // Ä if(curr==-61 && next==-124) { tmp+='Ä'; ++i; } // ä else if(curr==-61 && next==-92) { tmp+='ä'; ++i; } // Ö else if(curr==-61 && next==-106) { tmp+='Ö'; ++i; } // usw... tmp.swap(txt); }
-
Du solltest erstmal in der Referenz der entsprechenden GUI-Lib nachschauen, was die für eine Encodierung liest bzw. rausgibt. Vielleicht kann man dort ja schon wählen.
Und dann gibt es noch sowas wie std::mbstowcs, std::wcstombs und die std::codecvt-Dinger.
-
danke, mit deinen funktionen hat es geklappt.
konkret habe ich dann aber beim gui framework FLTK die passende funktion gefunden:
fl_utf8toa: wandelt einen utf8 string in einen ascii string um, so wie man ihn dann auch an einen std::string übergeben kann.