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 nurString
.
-
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 !