![]() |
Anzeigen von Unicode-Zeichen
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,
durch Einführung der "Unicode UTF-8"-Einstellung in Windows 10 (siehe hier: ![]() Wir haben in unserer Software ein Feedback-Formular, in dem wir Smileys zum Bewerten anzeigen. Früher haben wir dort die Zeichen "J", "K" und "L" in der Wingdings Schriftart angezeigt, was dann als lachender, neutraler bzw. trauriger Smiley angezeigt wurde. Durch die "Unicdoe UTF-8"-Einstellung in Windows wurden dann tatsächlich nur noch die Buchstaben "J", "K" und "L" angezeigt. Als Lösung habe ich mir gedacht, dass wir einfach die Unicode-Zeichen für die Smileys benutzen und anzeigen können. Mit folgender Implementierung kann man das testen:
Delphi-Quellcode:
Die Idee dahinter ist einfach: Ich benutze die UTF-8-Kodierung für den Smiley und lasse mir die Bytes in einen (Unicode-)String konvertieren.
procedure TfrmMain.Button1Click(Sender: TObject);
const SMILEY_UTF8_SLIGHTLY_SMILING_FACE: RawByteString = #$F0#$9F#$99#$82; // Unicode Code Point: U+1F642 (UTF-8 encoded) begin ShowMessage(Utf8ToString(SMILEY_UTF8_SLIGHTLY_SMILING_FACE)); end; Unter Windows 10 funktioniert das auch ohne Probleme (unabhängig davon, ob die Unicode UTF-8 Einstellung gesetzt ist oder nicht). Siehe Anhang "Windows 10.jpg". Unter Windows 7 wird der Smiley jedoch nicht richtig dargestellt. Siehe Anhang "Windows 7.jpg". Ich frage mich, warum die Darstellung unter Windows 7 nicht gelingt und wie das Problem unabhängig von der Windows-Version gelöst werden kann. Ich bin für Hilfe/Ideen dankbar. |
AW: Anzeigen von Unicode-Zeichen
Schon versucht einfach8 das Unicode-Zeichen in den Quelltext zu kopieren statt das alles über Konvertierungen zu machen?
Delphi-Quellcode:
showmessage('��'); // hier soll eigentlich der Unicode-Smiley sein. Aber die DP entfernt ihn beim Bearbeiten des Beitrags.
![]() Ich sehe gerade, das funktioniert unter Windows 7 nicht. |
AW: Anzeigen von Unicode-Zeichen
Zitat:
Wenn du unbedingt noch W7 unterstützen musst, musst du in deinem Code ein Weiche machen Win7 - Wie bisher Win10 - Neue Logik |
AW: Anzeigen von Unicode-Zeichen
Zitat:
Zitat:
![]() Mein Workaround wäre dann, einen älteren Smiley zu benutzen, z. B. U+263A ( ![]() Noch eine andere Frage: Mir ist jetzt gerade erst aufgefallen, dass meine Deklaration
Delphi-Quellcode:
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?
const
SMILEY_UTF8_SLIGHTLY_SMILING_FACE: RawByteString = #$E2#$98#$BA; // Unicode Code Point: U+263A 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; |
AW: Anzeigen von Unicode-Zeichen
Zitat:
Delphi-Quellcode:
const
SMILEY_UTF8_SLIGHTLY_SMILING_FACE: TBytes = [$E2, $98, $BA]; // Unicode Code Point: U+263A begin ShowMessage(TEncoding.UTF8.GetString(SMILEY_UTF8_SLIGHTLY_SMILING_FACE)); end; |
AW: Anzeigen von Unicode-Zeichen
UTF8String (inkl. UTF-8-CodePage, statt Ohne wie beim RawByteString)
Und zusätzlich noch den Spaß, wo #xx-Zeichen eventuell anders gespeichert werden, also du denkst, bzw. automatisch konvertiert werden. ![]() |
AW: Anzeigen von Unicode-Zeichen
@Uwe Raabe: Danke, genau das, wonach ich gesucht habe :)
@himitsu: Wie ich anhand der verlinkten Seite und der darin verlinkten Seite zur Delphi-Hilfe sehe, muss ich da noch einige Zeit investieren, um das zu verstehen. |
AW: Anzeigen von Unicode-Zeichen
Zitat:
|
AW: Anzeigen von Unicode-Zeichen
Zitat:
|
AW: Anzeigen von Unicode-Zeichen
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz