Darstellung von unicode-Schriftzeichen

  • Darstellung von unicode-Schriftzeichen

    Hallo an alle,

    arbeite seit einigen Tagen mit rubyCocoa (bin auch objective-c_Neuling) und habe nun folgendes Problem :

    Habe einen Algorithmus der asiatische Schriftzeichen produziert, er generiert unicode in folgender Form : བ་

    Nun möchte ich diesen unicode in den entsprechenden Schriftzeichen in einem TextField oder Label darstellen lassen.

    Hier hört es dann schon auf... Kann man dem Label/Textfield einen font o.ä. zuweisen.

    Vorab vielen Dank für euer Interesse

    Grüße ins Forum

    subverse
  • Frage zur Syntax

    Hallo nochmal,

    habe folgendes probiert :

    @unicode.setFont(NSFont.fontWithName_size("Kokonor", 18.0))
    @unicode.setFont(NSFont.fontWithName("Kokonor"))
    @unicode.setFont("Kokonor")
    dasselbe auch mit 'Kailasa' und 'tibetian machine uni' - ist meine Syntax falsch? (build and run ist erfolgreich).

    Dies hat bei der Ausführung den exitcode 1 oder ...'bad_access' zur Folge.

    Alternativ habe ich verucht die fontsettings im interface builder vorzunehmen - ohne Erfolg.
    Die Schriften werden zwar (ohne Absturz) angezeigt, aber es werden immer noch die unicode-values dargestellt und nicht, wie gewünscht, die entsprechenden Schriftzeichen.

    Vieleicht könnte jemand noch einen Tip geben.

    Vorab vielen Dank

    subverse
  • danke für den Tip - es wurde keine Instanz erzeugt !

    So erhalte ich eine Instanz von NSFont :

    font = OSX::NSFont.fontWithName_size("Kokonor", 18.0)

    Habe nur nicht rausfinden können warum keine Schriftzeichen, sondern die unicode-values angezeigt werden.

    subverse
  • RE: Darstellung von unicode-Schriftzeichen

    Ich weiß nicht, ob ich dic h verstehe. Aber du generierst einen String in der Form "བ་"? Wieso sollte dann etwas anderes angezeigt werden, als dieser String?
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Darstellung von unicode-Schriftzeichen

    Original von subverse
    Habe einen Algorithmus der asiatische Schriftzeichen produziert, er generiert unicode in folgender Form : བ་

    Das ist doch die XML- bzw. HTML-Darstellung der Schriftzeichen. Mit developer.apple.com/mac/librar…hHTML:documentAttributes: sollten die sich doch in ihr NSString-Unicode-Äquivalent umwandeln lassen, oder?

    EDIT: Falls Du das Zeichen vorher schon als int in den Fingern hast, solltest Du es mit dem Format "%C" in den String einfügen.
    „Meine Komplikation hatte eine Komplikation.“
  • RE: Darstellung von unicode-Schriftzeichen

    Vielen Dank für den Tip.

    Es handelt sich tatsächlich um Zeichen die eigentlich in einem Browser dargestellt werden.

    Das Einfügen per %C klappt zwar insofern, dass wenigstens Schriftzeichen aus dem gewünschten Zeichensatz angezeigt werden, jedoch nicht die richtigen.

    Werde jetzt mit initWithHTML:(NSData *)data... weiterarbeiten und hierdurch hoffentlich auch meine Objective-C Kenntnisse etwas verbessern - ich sehe schon, dass es mir an rudimentären Dingen fehlt.

    Danke für anhaltendes Interesse und Geduld (mit so nem blutigen Anfänger)

    Grüße

    subverse
  • RE: Darstellung von unicode-Schriftzeichen

    Ich glaube, du bist dir noch nicht ganz im Klaren darüber, was Zeichensatz bedeutet.

    Noch einmal: Du erzeugst einen String mit dem Inhalt @"བ་". Dann wunderst du dich, warum dieser String nicht angezeigt wird. Warum nicht? Ganz einfach: Der erzeugte String lautet @"བ་".

    Was du jetzt als nächsten Schritt planst, ist es, diesen String zu interpretieren und daraus so etwas wie [Zwei Zeichen, die hier nicht angezeigt werden können] (Das ist übrigens tibetisch, nicht chinesisch) zu machen. Wieso so kompliziert? Die Notation mit &# ist erfunden worden, um Unicode-Zeichen durch "nicht-unicode" Schnittstellen zu schleusen. Das ist nicht dein Problem, weil auf dem Mac alles Unicode ist. Ebenso gut, köntest du dir den String per E-Mail zusenden, ein Script schreiben, welches die Mail automatisch auf Festplatte speichert, damit du es von da laden kannst.

    Du willst einen String mit Zeichen, die einem bestimmten Unicode entsprechen. Dann erzeuge dir einen solchen String und nicht irgendeine Notation, die uns Windoof aufgedrückt hat. Dazu verwendest du zum Beispiel %C. Jeder weitere Umweg führt nur von Ziel weg.

    Du kannst dir etwa auch die einzelnen Code in ein C-Array oder ein Data-Objekt schreiben und dann mit

    Quellcode

    1. NSString* theRealString = [[[NSString alloc] initWithBytes:theCodes length:length encoding:NSStringUnicodeEncoding] autorelease];

    holen. Was genau wie am besten ist, lässt sich nur beurteilen, wenn man den Code zur Erzeugung der Zeichen kennt.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Darstellung von unicode-Schriftzeichen

    Mal ne blöde Frage:
    wie bekomme ich denn [Zwei Zeichen, die hier nicht angezeigt werden können] in den String gepackt, wenn meine Tastatur das gar nicht her gibt?
    Copy'n'Paste von tibetanischen Wörterbüchern? Den Zifferncode in der UTF-Tabelle suchen und als Char ausgeben lassen?

    Ich hab da keine Ahnung. :)
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • RE: Darstellung von unicode-Schriftzeichen

    Original von Lucas de Vil
    Mal ne blöde Frage:
    wie bekomme ich denn [Zwei Zeichen, die hier nicht angezeigt werden können] in den String gepackt, wenn meine Tastatur das gar nicht her gibt?
    Copy'n'Paste von tibetanischen Wörterbüchern? Den Zifferncode in der UTF-Tabelle suchen und als Char ausgeben lassen?

    Ich hab da keine Ahnung. :)


    a)
    Habe einen Algorithmus der asiatische Schriftzeichen produziert, er generiert unicode in folgender Form : བ་


    b)
    Zeichenübersicht
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Darstellung von unicode-Schriftzeichen

    Danke für die Aufkärung in Sachen unicode.
    Ich komme tatsächlich von windows/linux und habe meinen mac erst seit ein paar Tagen.

    Habe jetzt so versucht:

    Quellcode

    1. UniChar kha = "0F41";
    2. NSLog(@"%C", kha);

    Allerdings gibt er anstatt das Zeichen für 0F041, das Zeichen für 0F00 aus.

    Auch hiermit klappt es nicht :

    Quellcode

    1. NSData *data = [@"0F41" dataUsingEncoding:NSUTF8StringEncoding];
    2. NSString *tib = [[[NSString alloc] initWithBytes:data length:4 encoding:NSUnicodeStringEncoding] autorelease];
    3. NSLog(@"%@", tib);

    wobei length > 1 immer das gleiche Schriftzeichen ausgibt, jedoch leider kein tibetisches.

    Irgendwie stehe ich total aufm Schlauch.

    Grüße

    subverse
  • RE: Darstellung von unicode-Schriftzeichen

    Original von Amin Negm-Awad
    Du willst einen String mit Zeichen, die einem bestimmten Unicode entsprechen. Dann erzeuge dir einen solchen String und nicht irgendeine Notation, die uns Windoof aufgedrückt hat.

    Huh? Was genau hat uns "Windoof" aufgedrückt?

    Davon abgesehen: Sollte nicht soetwas wie "\xf\x41" für &#0f41; funktionieren? Oder in Oktal "\41\101"?

    Und: Die Schriftart sollte man doch nicht setzen müssen, oder? Ich gehe davon aus, dass OSX die am besten passende Schriftart heraussucht, die dieses Zeichen darstellen kann.
    C++
  • RE: Darstellung von unicode-Schriftzeichen

    Original von zermelo
    Original von Amin Negm-Awad
    Du willst einen String mit Zeichen, die einem bestimmten Unicode entsprechen. Dann erzeuge dir einen solchen String und nicht irgendeine Notation, die uns Windoof aufgedrückt hat.

    Huh? Was genau hat uns "Windoof" aufgedrückt?

    Systeme, die nicht nativ mit Unicode umgehen können.

    Original von zermeloDavon abgesehen: Sollte nicht soetwas wie "\xf\x41" für &#0f41; funktionieren? Oder in Oktal "\41\101"?

    Nein, weil er dann einen String erzeugt, der @"\41\101" heißt. Ob nun &# oder \x oder \ – das sind Darstellungen, um von ASCII auf Unicode zu kommen. Die müssen interpretiert werden. Wer interpretiert einen fertigen String? Richtig: Niemand. Das wird bei der Stringerstellung, etwa mit -stringWithFormat: interpretiert.

    Original von zermeloUnd: Die Schriftart sollte man doch nicht setzen müssen, oder? Ich gehe davon aus, dass OSX die am besten passende Schriftart heraussucht, die dieses Zeichen darstellen kann.

    Er sprach IIRC von Zeichensatz. Dann hat er die Schriftart gesetzt. Deshalb schräbte ich ja, dass er sich über die Begrifflichkeiten wohl noch nicht im Klaren ist..
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Darstellung von unicode-Schriftzeichen

    Original von subverse
    Danke für die Aufkärung in Sachen unicode.
    Ich komme tatsächlich von windows/linux und habe meinen mac erst seit ein paar Tagen.

    Habe jetzt so versucht:

    Quellcode

    1. UniChar kha = "0F41";
    2. NSLog(@"%C", kha);

    Allerdings gibt er anstatt das Zeichen für 0F041, das Zeichen für 0F00 aus.

    UniChar ist im Prinzip ein int. Das muss

    Quellcode

    1. unichar kha = 0x0F41; // klein geschrieben!
    heißen. Du weißt einen Pointer zu – sicherlich mit Warnings des Compilers –, was zu rein zufälligen Ergebnissen führt.

    Original von subverseAuch hiermit klappt es nicht :

    Quellcode

    1. NSData *data = [@"0F41" dataUsingEncoding:NSUTF8StringEncoding];
    2. NSString *tib = [[[NSString alloc] initWithBytes:data length:4 encoding:NSUnicodeStringEncoding] autorelease];
    3. NSLog(@"%@", tib);

    wobei length > 1 immer das gleiche Schriftzeichen ausgibt, jedoch leider kein tibetisches.

    Irgendwie stehe ich total aufm Schlauch.

    Ja, zu obigen Code sage ich nichts. Nur nebenbei: Du solltest hexadezimalzahlen ein 0x voranstellen. (Jedenfalls in Objective-C/C, wie das bei Ruby ist, weiß ich nicht.)

    Aber du wirfst immer noch total String und seine Darstellung durcheinander. In deinem String existiert ein Zeichen. Nicht 2 Bytes, nicht 16 Bit der 32 Bit, sondern ein Zeichen. Alle Lösungen, die mehr als ein Zeichen enthalten, sind daher schon falsch.

    Dementsprechend musst du ein Zeichen erzeugen. Oder du erzeugst dir den Index als Zahl im Unicode. Zahlen werden nicht in Hochkommata gesetzt. Dann erzeugst du aus dieser Zahl einen String, mit einem Zeichen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?