AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Anzeigen von Unicode-Zeichen

Ein Thema von Scurra · begonnen am 22. Apr 2020 · letzter Beitrag vom 23. Apr 2020
Antwort Antwort
Scurra

Registriert seit: 19. Jan 2015
81 Beiträge
 
Delphi 10.3 Rio
 
#1

Anzeigen von Unicode-Zeichen

  Alt 22. Apr 2020, 11:25
Hallo zusammen,

durch Einführung der "Unicode UTF-8"-Einstellung in Windows 10 (siehe hier: https://www.delphipraxis.net/203925-...verwenden.html) mussten wir ein paar Stellen in unserer Software anpassen. Ein Problem besteht nun jedoch weiterhin:

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:
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;
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.

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.
Miniaturansicht angehängter Grafiken
windows-10.jpg   windows-7.jpg  

Geändert von Scurra (22. Apr 2020 um 16:46 Uhr)
  Mit Zitat antworten Zitat
DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#2

AW: Anzeigen von Unicode-Zeichen

  Alt 22. Apr 2020, 11:34
Schon versucht einfach8 das Unicode-Zeichen in den Quelltext zu kopieren statt das alles über Konvertierungen zu machen?

showmessage('��'); // hier soll eigentlich der Unicode-Smiley sein. Aber die DP entfernt ihn beim Bearbeiten des Beitrags.
https://de.wikipedia.org/wiki/Unicodeblock_Smileys
Ich sehe gerade, das funktioniert unter Windows 7 nicht.

Geändert von DieDolly (22. Apr 2020 um 11:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Anzeigen von Unicode-Zeichen

  Alt 22. Apr 2020, 12:16
Ich sehe gerade, das funktioniert unter Windows 7 nicht.
Was funktioiert nicht? Ich vermute das unter W7 einfach die Schriftart das Zeichen nicht beinhaltet.
Wenn du unbedingt noch W7 unterstützen musst, musst du in deinem Code ein Weiche machen
Win7 - Wie bisher
Win10 - Neue Logik
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Scurra

Registriert seit: 19. Jan 2015
81 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Anzeigen von Unicode-Zeichen

  Alt 22. Apr 2020, 15:15
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;
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#5

AW: Anzeigen von Unicode-Zeichen

  Alt 22. Apr 2020, 15:19
Gibt es eine andere Möglichkeit, UTF-8 kodierte Bytes in einen Delphi-String zu bekommen?
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

AW: Anzeigen von Unicode-Zeichen

  Alt 22. Apr 2020, 15:34
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.
https://www.delphipraxis.net/192296-...ml#post1366693
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Apr 2020 um 15:39 Uhr)
  Mit Zitat antworten Zitat
Scurra

Registriert seit: 19. Jan 2015
81 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Anzeigen von Unicode-Zeichen

  Alt 23. Apr 2020, 07:37
@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.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.049 Beiträge
 
Delphi 2009 Professional
 
#8

AW: Anzeigen von Unicode-Zeichen

  Alt 23. Apr 2020, 10:05
@Uwe Raabe: Danke, genau das, wonach ich gesucht habe
Das ändert tatsächlich was daran, ob es unter Windows 7 geht oder nicht?
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.442 Beiträge
 
Delphi 12 Athens
 
#9

AW: Anzeigen von Unicode-Zeichen

  Alt 23. Apr 2020, 10:45
Das ändert tatsächlich was daran, ob es unter Windows 7 geht oder nicht?
Keine Ahnung. Mein Vorschlag bezog sich konkret auf die Frage, die ich in meiner Antwort zitiert habe.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Scurra

Registriert seit: 19. Jan 2015
81 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Anzeigen von Unicode-Zeichen

  Alt 23. Apr 2020, 12:33
Das ändert tatsächlich was daran, ob es unter Windows 7 geht oder nicht?
Ja. Die "alten" Smileys von 1993 werden auch in Windows 7 angezeigt (getestet auf 2 verschiedenen Systemen).
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz