![]() |
Problem mit Unicode-Zeichen-Darstellung mit UTF8 Codierung
Hallo zusammen
Ich habe eine Knacknuss mit einer Unicode-Darstellung mit UTF-8. Ich habe das Problem, wenn ich ein Zeichen übergebe, dass mir das Zeichen nicht dargestellt wird. Grundsätzlich habe ich meine Klassen so erweitert, dass die UTF-8 codierung als Caption übergeben werden kann, die anschliessend intern in WideString umgewandelt und mit der DrawTextW als Unicode ausgegeben wird. Als Font verwende ich Arial Unicode MS. Nun habe ich festgestellt, dass Zeichen in höherem Adressraum nicht dargestellt werden. Ich meine zu glauben, dass ich 2005 mit der gleichen Methode erfolgreich war und kann mir nicht erklären weshalb die Zeichen nicht mehr dargestellt werden. Als Beispiel habe ich die Beispielklasse verwendet, die von CalganX hier im Forum veröffentlicht wurde. Mit dieser Klasse habe ich das gleiche Problem wie bei meinen eigenen Klassen: ![]() Illustration Abfüllung des Textes mit einem chinesischen Zeichen (D481#) in UTF-8-Codierung (EFC883#):
Delphi-Quellcode:
Für einen heissen Tipp wo das Problem liegen könnte, bin ich sehr dankbar!
procedure TForm1.Button1Click(Sender: TObject);
var fName : WideString; begin fName :=UTF8Decode(Chr(StrToInt('$EF'))+chr(strtoint('$C8'))+chr(strtoint('$83'))); UnicodeLabel.Caption := fName; end; |
Re: Problem mit Unicode-Zeichen-Darstellung mit UTF8 Codieru
Nicht falsch verstehen aber so wie du deinen Buchstaben zusammenbastelst könnten einem die Augen tränen. ;) Es geht auch viel einfacher und du musst dann keine Umwandlungen über Integer machen. Mit #dezialwert definierst du ein Zeichen anhand eines Dezimalwertes. Mit #$hexwert definierst du ein Zeichen anhand eines Hexwertes.
Delphi-Quellcode:
Beides ist gleich nur, dass das untere Besser zu lesen ist. Aber bei beiden Methoden handelt es sich um einen konstanten String. In deinem Beispiel muss erst mittels Code der String erzeugt werden.
String := #$EF#$C8#$83;
// oder String := #$EF + #$C8 + #$83; Hast du mal geschaut was nach UTF8Decode raus kommt. Ob da auch wirklich dein Wert enthalten ist? Wenn das UTF-8 stimmt, dann sollte es aber. Und stelle bitte ganz sicher, dass du auch das entsprechende Font benutzt. Im Falle eines nicht findens nimmt Windows ein anderes. Wenn das dann ausgerechnet Arial ist, dann merkt man den Unterschied kaum bzw nur dann wenn Zeichen fehlen. Zitat:
Sonst wüsste ich nicht was es sein könnte. Eigentlich ist das alles ja auch nicht so komplex. |
Re: Problem mit Unicode-Zeichen-Darstellung mit UTF8 Codieru
mißt, war einer schneller
Was ist UnicodeLabel für ein Objekt? und hast du mal in den WideString (fName) geschaut, was darin steht? fName ist WideString und somit wird auch bei nur einem Zeichen ein #0 angehängt ... daran sollte es also nicht hängen. gibt UTF8Decode nicht bei einem Fehler in der UTF8-Codierung einen Leerstring zurück? (dann dürfte aber auch garkein Zeichen angezeigt werden, wenn er den String nicht dekodieren kann :grüebel: ) die Zeichen sind auch in Arial Unicode MS enthalten? /me verwendet meißt eines davon PMingLiU, MS Gothic, MS Mincho, MS PGothic, MS PMincho, MS UI Gothic
Delphi-Quellcode:
oder wie Lossy eX schon Zeigte direkt per
UTF8Decode(Chr($EF)+chr($C8)+chr($83));
Delphi-Quellcode:
ansonsten wüßte ich auch nicht woran es hängen kann arbeite leider nur direkt mit Unicode (kein UTF8 mehr, aber damit hatte ich früher noch keine Probleme gehabt) und der WinAPI (keine Fremdkomponenten)
UTF8Decode(#$EF#$C8#$83)
|
Re: Problem mit Unicode-Zeichen-Darstellung mit UTF8 Codieru
Hallo zusammen
Volle Punktzahl für himitsu. Ich habe die Kleider zerissen und Asche über mich geworfen! Nach Konsulatation des Wikipedia ![]() Nun habe ich sämtliche Text-Klassen erweitert und die Applikation kann sämtliche Unicode-Zeichen anzeigen und unsere Dokumentationsabteilung kann mit der Übersetzung beginnen. Herzlichen Dank für eure Hinweise. Lassy eX: Natürlich ist die Schreibweise nicht optimal. Aber irgendwie habe ich den Syntax, wann ich welches # oder $ Zeichen benutzen muss nie Intus und so verwende ich bei einem Entwurf wo es schnell gehen muss die "Holzhammermethode"... :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 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 by Thomas Breitkreuz