Firemonkey Umlaute



  • XE7, Firemonkey, Android - Umlaute werden als Sonderzeichen dargestellt. Gibt es irgendwo eine Einstellung hierzu ? Im Netz finde ich nur Ideen zu StringReplace. Das will ich mir ersparen.

    Danke !



  • Code, bitte.

    Ich vermute, du hast Stringliterale mit Umlauten im Quelltext, und der Compiler betrachtet deine Quelldatei als Windows-1252-codiert oder so.

    Das beste ist, nicht-englischsprachige Strings aus Ressourcendateien zu laden, um den Encoding-Problemen aus dem Weg zu gehen. Alternativ kannst du aber auch das gewünschte Encoding forcieren. Außerdem darfst du halt kein AnsiString benutzen, sondern immer nur String .



  • Hallo,

    beim ersten Start wird die SQLite Datenbank angelegt. Die Tabelleninhalte hab ich hab in String Arrays, werden nach dem Anlegen als Datensätze übertragen. Und der Anwender trägt über Edit-Felder selbst Datensätze ein. Und da eben z. B. Ösophagus Adhäsion.



  • audacia schrieb:

    Code, bitte.



  • Das betrifft übrigens auch Ausgabetexte wie MessageDlg oder ShowMessage. Auch hier erscheinen Sonderzeichen.

    struct TCloseDialogHandler
    		: public TCppInterfacedObject<TInputCloseDialogProc> {
    		void __fastcall Invoke(const System::Uitypes::TModalResult AResult) {
    			switch (AResult) {
    			case mrYes:
    				DeletePatient();
    				break;
    			case mrNo:
    				break;
    			}
    		}
    	};
    
    	_di_TInputCloseDialogProc handler = new TCloseDialogHandler();
    
    	MessageDlg("Patienten loeschen ?", TMsgDlgType::mtInformation,
    		TMsgDlgButtons() << TMsgDlgBtn::mbYes << TMsgDlgBtn::mbNo, 0, handler);
    
    FDQuery1->SQL->Clear();
    	FDQuery1->SQL->Add("CREATE TABLE IF NOT EXISTS bereiche (bereiche_id integer, bereich text, entry text)");
    	FDQuery1->ExecSQL();
    
    	sBereicheBesch[0] = "Akne";
    	sBereicheBesch[1] = "Allergie";
    	sBereicheBesch[2] = "Altersdemenz";
    	sBereicheBesch[3] = "Arterienverkalkung";
    	sBereicheBesch[4] = "Arthritis";
    	sBereicheBesch[5] = "Arthrose";
    	...
    	sBereicheBesch[28] = "Gefühlsstörung";
    	...
    	sBereicheBesch[32] = "Grüner Star";
    	sBereicheBesch[33] = "Gürtelrose";
    	...
    	sBereicheBesch[48] = "Krämpfe";
    	...
    	sBereicheBesch[50] = "Lungenentzündung";
    	...
    	sBereicheBesch[53] = "Mandelentzündung";
    	sBereicheBesch[54] = "Migräne";
    	sBereicheBesch[55] = "Mißempfinden";
    	...
    
    	FDQuery1->Close();
    	FDQuery1->SQL->Clear();
    	FDQuery1->SQL->Add("Select * from bereiche");
    	FDQuery1->Open();
    
    	for (int i = 0; i < 80; i++) {
    		FDQuery1->Append();
    		FDQuery1->FieldByName("bereiche_id")->AsInteger = i + 1;
    		FDQuery1->FieldByName("bereich")->AsString = "Koerper";
    		FDQuery1->FieldByName("entry")->AsString = sBereicheBesch[i];
    		FDQuery1->Post();
    	}
    


  • Das bestätigt fast alle meine Vermutungen. Und wahrscheinlich speichert auch die Datenbank die Datensätze auch noch in irgendeiner Codepage anstatt in UTF-8.



  • Setz mal vor deinen Strings ein L

    also statt

    sBereicheBesch[28] = "Gefühlsstörung";
    

    dann

    sBereicheBesch[28] = L"Gefühlsstörung";
    


  • So klappt das, Vielen Dank !


Log in to reply