AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Unicode Zeichen 1/3 als ein Zeichen darstellen
Thema durchsuchen
Ansicht
Themen-Optionen

Unicode Zeichen 1/3 als ein Zeichen darstellen

Ein Thema von itblumi · begonnen am 31. Mär 2011 · letzter Beitrag vom 1. Apr 2011
Antwort Antwort
Seite 1 von 2  1 2      
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#1

Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 18:43
Hallo,

hat jemand eine Idee wie man 1/3 als ein Zeichen darstellen kann?
Ich habe schon vieles versucht, aber ohne Erfolg.
Z.B.:
Delphi-Quellcode:
Edit1.Text := chr($2153);

/// <summary>
/// U+2153   ⅓   e2 85 93   VULGAR FRACTION ONE THIRD
/// </summary>
VULGAR_FRACTION_ONE_THIRD: Cardinal = $e28593;

Edit1.Text := AnsiChar(VULGAR_FRACTION_ONE_THIRD);
Alles hat nicht funktioniert und mir wurde nur ein viereck angezeigt.

Zu allem Trotz kann man 1/8 darstellen ob wohl man das viel seltener braucht.
Edit1.Text := chr($215b); Hat jemand eine Idee von euch?
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#2

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 19:01
AnsiChar(VULGAR_FRACTION_ONE_THIRD); dürfte Teil des Problems sein. Schon ohne den Typecast probiert?

Nebenbei: Welche Delphiversion?
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 19:39
AnsiChar ginge eh nicht, da es nur bis $ff Platz hat.
und auch $e28593 geht überhaupt nicht, da WideChar ebenso nur nur bis $ffff reicht.

Bei soeinem großen Wert kannst du es nur mit Surrogate-Pairs versuchen und dann benötigst du auch noch einen Font, welcher dieses Zeichen enthält (wenn überhaupt, bieten die meisten Fonst nur Zeichen bis unter $ffff.

Ich bin mir aber sicher, daß es ein Zeichen, wie 1/3 schon in diesesm unteren Bereich gibt.

Oder du nimmst einen Mathe-Font, welcher diese Zeichen direkt im Bereich $20 bis $ff anbietet, wie es z.B. auch bei Marlett und Co. der Fall ist.

Also chr($2153); wäre schon richtig gewesen (bei Delphi ab Version 2009.
Bis Delphi 2007 müßte man mit speziellen Unicode-Controls nachrüsten (elPack oder TNTUnicodeControls)

Und wie kommst du eigentlich von $2153 auf $e28593
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (31. Mär 2011 um 19:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#4

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 19:49
Und wie kommst du eigentlich von $2153 auf $e28593
Siehe hier:
Code:
/// U+2153   &#8531;  e2 85 93   VULGAR FRACTION ONE THIRD
... e2 85 93
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#5

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 20:44
Ich benutze Delphi2010 also eigentlich sollte es ja UTF8 beherschen.
Aber die Wirklichkeit sieht anders aus.

Ich habe zu erst auf eine UTF-8 Codepage geschaut um mir die richtigen Symbole dafür zu suchen.
hier mein Link:
http://www.utf8-chartable.de/unicode....pl?start=8528

Da stehen die Hexadezimal Werte für die entsprechenden Symbole.
Übrigens ein Type Cast mit AnsiChar funktioniert, aber wahrscheinlich nur in den unteren Bereichen einer Codepage.

Delphi-Quellcode:
/// <summary>
/// U+00BC   ¼   c2 bc   VULGAR FRACTION ONE QUARTER = 1/4
/// </summary>
VULGAR_FRACTION_ONE_QUARTER: Cardinal = $c2bc;

Edit1.Text := AnsiChar(VULGAR_FRACTION_ONE_QUARTER);
Könntest du mir vllt ein Beispiel für eine Surrogate Berechnung geben?
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#6

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 20:48
Wenn ich ein Math Font nehmen würde, dann müsste ich diese Schriftart doch auf jedem Rechner wo mein Programm laufen soll installieren oder?
Und bei vielen PC's wäre das ein zu hoher Konfigurationsaufwand.
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 22:01
aso, das war UTF-8

Wenn schon UTF-8, dann muß dieses in einen UTF8String rein (dann kodiert es Delphi automatisch nach Unicode, welches dein Edit haben möchte)
oder decodierst es manuell via UTF8Decode
(in beiden Fällen ist ein Zweierpaar jeweils ein Zeichen/AnsiChar/Byte, also Unicode #$2153 oder #8531 = UTF-8 #$e2#$85#$93)

oder du läßt es gleich Unicode.

Zitat:
Wenn ich ein Math Font nehmen würde, dann müsste ich diese Schriftart doch auf jedem Rechner wo mein Programm laufen soll installieren oder?
Jupp, wobei es auch die Möglichkeit gibt, eine Schriftart dynamisch (nur) im eigenem Programm zu laden. (dann könnte sie im Verzeichnis deines Programmes liegen oder sogar als Resource integriert)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (31. Mär 2011 um 22:06 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 22:04
Bitte lies doch erstmal unsere Antworten. Himitsu hat sich sogar noch mehr Mühe gegeben als ich mit seiner Antwort und alles relevant steht schon drin. Insbesondere:

chr($2153);
Ich benutze Delphi2010 also eigentlich sollte es ja UTF8 beherschen.
Aber die Wirklichkeit sieht anders aus.
Delphi 2010 soll erstmal vor allem Unicode verstehen. Die Strings sind intern allerdings meines Wissens nach UTF-16 (bzw. UCS-2 auf Windows 2000, NT4). Was du also mit UTF-8 willst und wieso du deine Literale aufdröselst als ob sie UTF-8 wären, obwohl du ja ein WideChar benutzen könntest, ist mir schleierhaft.

Übrigens ein Type Cast mit AnsiChar funktioniert, aber wahrscheinlich nur in den unteren Bereichen einer Codepage.
Nein, der Typecast ist Unsinn, weil ein AnsiChar nur 8 Bits hat und du 16 Bits (WideChar) brauchst. Siehe Himitsus erste Antwort.

Könntest du mir vllt ein Beispiel für eine Surrogate Berechnung geben?
Warum kannst du nicht WideChar benutzen?

@Himitsu: er hat nen Literal den er in einem String (sprich: WideString) verarbeiten will. Wo ist da etwas von UTF-8 zu sehen? Ich seh jedenfalls nix dergleichen.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)

Geändert von Assarbad (31. Mär 2011 um 22:19 Uhr) Grund: weil ich's kann
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

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

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 22:35
Ich benutze Delphi2010 also eigentlich sollte es ja UTF8 beherschen.
Aber die Wirklichkeit sieht anders aus.
In wirklichkeit kann Delphi schon seit D3 Unicode - halt nicht in allen Bereichen. Und Delphi verwendet wie Java und .NET für die interne "native" Repräsentation eines Unicodestrings/zeichens UTF-16. UTF8 wird als natives Format bei Freepascal/Lazarus verwendet UTF8.

Für Delphi/.NET ist es sinnvoll UTF16 zu verwenden da die ganze Win32-API seit "gedenken" (müsste W2k sein) UTF16 verwendet. Davor wurde "nur" UCS-2 verwendet.

Wenn deine IDE/Quellcodedateien richtig einstellt sind brauchst du nix machen (Sollte ab D2009 funktionieren):
Delphi-Quellcode:
VULGAR_FRACTION_ONE_QUARTER: Cardinal = $c2bc;
Edit1.Text := VULGAR_FRACTION_ONE_QUARTER;
Du wirst als "altpropertie" noch Teilweise Codpage/Charset find (im Font-Object). Dies solltest du niemals mehr verwenden/umstellen wenn du eine neue IDE-Version hast.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
itblumi

Registriert seit: 28. Mär 2009
73 Beiträge
 
Delphi XE6 Professional
 
#10

AW: Unicode Zeichen 1/3 als ein Zeichen darstellen

  Alt 31. Mär 2011, 22:53
Ich habe übrigens jede Konvertierung genutzt WideChar, WideString, AnsiChar, AnsiString, UnicodeString, UTF8To.., alles hat nix geholfen. Bitte probiert es doch selbst, wenn ihr mir nicht glaubt.
Bedenkt aber dabei das ich stets zum ausprobieren ein TEdit genutzt habe. Vllt. liegt es auch an dieser Komponente, ich weis es nicht.

Was mir aber eher wahrscheinlich ist, dass Delphi die genannten Surrogates doch nicht ganz darstellen kann oder es damit eventuelle Probleme gibt. So stellt es sich mir dar.


Was meinst du damit das ich andere Fonts benutzen solle, welche sind denn UTF-8 und welche nicht?
Ich habe bis jetzt nichts gefunden das Delphi nur einige Fonts in UTF-8 unterstützt.
Bitte gib mir ein Beispiel für unterstützte Fonts oder Links damit ich es nach lesen kann.
Jan
Ein neuer Tag bringt so einiges mit sich. Was auch immer es ist, es bleibt ein kleines Abenteuer.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:55 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