fpc/Lazarus: GTK zeigt String falsch oder gar nicht

Gast #6776696
Lesenswert?

Hi zusammen,
ich drehe mich gedanklich gerade etwas im Kreis - wobei ich auch nicht 
sicher bin, ob ich das Problem nicht verstanden habe oder doch ein Bug 
vorliegt...

Mein Programm ist eigentlich recht simpel: in einer Form ist ein 
TStaticText, dessen Caption ich setzen möchte.

Variante 1:
1
st.Caption:='süd';  // funktioniert korrekt

Variante 2:
1
const s: String = 'süd';
2
st.Caption:=s;      // funktioniert korrekt

Variante 3:
1
function s: String;
2
st.Caption:=s;      // GTK Fehler auf der Konsole: invalid UTF8 character
1
function s: String;
2
st.Caption:=UFT8Encode(s);   // zeigt 's?d' an

Variante 3 ist das Ziel (der Text wird dynamisch erzeugt). Was mache ich 
hier falsch? Und warum ist der String als Konstante scheinbar ein 
anderer String als als Funktions-Rückgabe?
Habe statt UFT8encode auch schon UFT8decode, UTF8toSys etc ausprobiert, 
bislang aber ohne Erfolg :(

Danke schon mal!

Viele Grüße

Andreas

P.S. Aktuell entwickle ich unter Linux. Wäre schön, wenn die Lösung auch 
unter Windows gehen würde - kann ich aber notfalls auch per 
Compiler-ifdef regeln.
Gast #6777421
Lesenswert?

Εrnst B. schrieb:
> Sind die Compiler-Optionen richtig gesetzt?
> Je nachdem wird "String" zu "AnsiString" oder "UnicodeString"?
> wie schaut's aus, wenn du direkt "UnicodeString" verwendest?
>
1
> const s:UnicodeString='TestÄÖÜ 🤪 🤮 🎲';
2
> ..
3
>

Hi Ernst,
vielen Dank, das war ein sehr guter Hinweis! :)
Mit AnsiString geht es nicht, mit explizit UnicodeString funktioniert 
es.
Was auch logisch ist, wenn man Deinen 2. Hinweis anschaut und in den 
Compiler-Einstellungen den Haken bei "AnsiStrings verwenden" findet. :(

Habe noch etwas weitergetrieben und auf folgende Konstellation 
heruntertitriert:
1
const s : UnicodeString = 'äöü';   // nur hier ist Unicode entscheidend!
2
function sf: String;
3
begin
4
  result:=s;
5
end;
6
st.Caption:=sf;

Vielen Dank!

Viele Grüße Andreas

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren