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.


Anmelden zum Antworten