Zitat:
Schon versucht einfach8 das
Unicode-Zeichen in den Quelltext zu kopieren statt das alles über Konvertierungen zu machen?
Meinem Verständnis nach funktioniert das auch unter Windows 10 nicht immer. Je nachdem, ob man die
Unicode UTF-8 Einstellung aktiviert hat oder nicht, würde Windows das Zeichen unterschiedlich interpretieren. Ich lasse mich aber gerne auch belehren, falls ich falsch liege.
Zitat:
Ich vermute das unter W7 einfach die Schriftart das Zeichen nicht beinhaltet.
Die Erklärung ergibt Sinn. Den Smiley, den ich verwende, gibt es erst seit 2014 in
Unicode (
https://www.compart.com/de/unicode/U+1F642), wahrscheinlich zu spät für Windows 7.
Mein Workaround wäre dann, einen älteren Smiley zu benutzen, z. B. U+263A (
https://www.compart.com/de/unicode/U+263A). Das funktioniert auch.
Noch eine andere Frage: Mir ist jetzt gerade erst aufgefallen, dass meine Deklaration
Delphi-Quellcode:
const
SMILEY_UTF8_SLIGHTLY_SMILING_FACE: RawByteString = #$E2#$98#$BA;
// Unicode Code Point: U+263A
zu einer Warnung führt: W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'RawByteString'. Gibt es eine andere Möglichkeit, UTF-8 kodierte Bytes in einen Delphi-String zu bekommen?
Ich habe es mit einem konstanten array[0..2] of Byte versucht, aber dann wird kein Smiley mehr angezeigt:
Delphi-Quellcode:
procedure TfrmMain.Button1Click(Sender: TObject);
const
SMILEY_UTF8_SLIGHTLY_SMILING_FACE:
array[0..2]
of Byte = ($E2, $98, $BA);
// Unicode Code Point: U+263A
begin
ShowMessage(UTF8ToString(SMILEY_UTF8_SLIGHTLY_SMILING_FACE));
end;