Charset eines Fonts ermitteln?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Charset eines Fonts ermitteln?

    Folgendes Problem. Gegeben ist eine NSFont Instanz. Ich benötige jetzt den „Charset“ dieses Fonts.
    Mit

    Quellcode

    1. NSUInteger nsEncoding = [aFont mostCompatibleStringEncoding];
    2. CFStringEncoding cfEncoding = CFStringConvertNSStringEncodingToEncoding(nsEncoding);
    3. UInt32 codepage = CFStringConvertEncodingToWindowsCodepage(cfEncoding);
    bekomme ich schon mal eine Codepage raus, die dann auch einem entsprechenden Charset zugeordnet werden kann. Wenn ich jetzt aber mal die Ergebnisse dieses Codeschnipsels mit den Ergebnissen vergleiche, die Apple aus den gleichen Fonts ermittelt, dann müsste es doch noch eine genauere/weitere Möglichkeit geben, den Charset zu ermitteln. Kann man die eventuell direkt aus den Fontdateien auslesen? Weiß da einer mehr? Wo gibt's mehr Infos?

    Michael
  • RE: Charset eines Fonts ermitteln?

    Ich weiß nicht genau, ob ich dich richtig verstanden habe, aber font.coveredCharacterSet. Mit bitmapRepresentation bekommst du eine Übersicht. Irgendwie sollte es auch gehen, das in einen Index-Set zu wandeln. Frag mich aber nicht, wo ch das mal gehört habe. Vielleicht bilde ich mir das auch nur ein.
    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: Charset eines Fonts ermitteln?

    Nein, das ist nicht das was ich brauche. Es geht einfach um die "Nummer" des Charset. Es gibt da eine Zuordnung zwischen Codepage und Charset. Hier mal die Tabelle:

    Quellcode

    1. charset codepage Windows/Mac name
    2. 0 1252 ANSI
    3. 1 0 Default
    4. 2 42 Symbol
    5. 77 10000 Mac Roman
    6. 78 10001 Mac Shift Jis
    7. 79 10003 Mac Hangul
    8. 80 10008 Mac GB2312
    9. 81 10002 Mac Big5
    10. 82 Mac Johab (old)
    11. 83 10005 Mac Hebrew
    12. 84 10004 Mac Arabic
    13. 85 10006 Mac Greek
    14. 86 10081 Mac Turkish
    15. 87 10021 Mac Thai
    16. 88 10029 Mac East Europe
    17. 89 10007 Mac Russian
    18. 128 932 Shift JIS
    19. 129 949 Hangul
    20. 130 1361 Johab
    21. 134 936 GB2312
    22. 136 950 Big5
    23. 161 1253 Greek
    24. 162 1254 Turkish
    25. 163 1258 Vietnamese
    26. 177 1255 Hebrew
    27. 178 1256 Arabic
    28. 179 Arabic Traditional (old)
    29. 180 Arabic user (old)
    30. 181 Hebrew user (old)
    31. 186 1257 Baltic
    32. 204 1251 Russian
    33. 222 874 Thai
    34. 238 1250 Eastern European
    35. 254 437 PC 437
    36. 255 850 OEM
    Alles anzeigen
    Mit den drei Zeilen Code bekomme ich nun die Zahl aus Spalte 2. Ich brauche aber die Werte aus Spalte 1. Problem dabei ist, dass ich fast ausschließlich Codepages "Mac ..." (>=10000) bekomme. Schaue ich aber mal in das RTF-Format, was NSAttributedString liefert, dann kommen die Mac Codepages fast gar nicht vor.

    Michael
  • RE: Charset eines Fonts ermitteln?

    Ah, du meinst die verwendete Kodierung, sozusagen "Charset alter Schule" als man sich noch entscheiden musste, welchen Zeichenvorrat man verwendete.

    Dann ist deine Spalte 1 etwas RTF-Spezifisches?
    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: Charset eines Fonts ermitteln?

    Original von gritsch
    Original von Michael
    Ja, die Tabelle stammt aus der RTF-Spezifikation.

    Michael


    ja dann, include sie in dein projekt und fertig!?

    Wenn das 'ne einfach Lösung wäre, hätte ich hier nicht gefragt. Es gibt nämlich Fonts, da funktioniert der Dreizeiler nicht. Da kommt dann als Codepage 0xFFFFFFFF raus. Zum Beispiel beim Font „Symbol“, was eigentlich Codepage 42 sein müsste (und bei NSAttributedString auch raus kommt). Die Doku zu mostCompatibleStringEncoding sagt ja auch, dass das mehr ein Ratespiel ist, als eine definitive Aussage.

    Michael
  • RE: Charset eines Fonts ermitteln?

    Sag mal, kannst du mit der Bitmap-Representation des Fonts und des RTF-Charsets (ich nenne das jetzt mal so, um Missverständnisse wie in meiner ersten Antwort zu vermeiden) das nicht recht schnell selbst herausfinden?

    Wenn man mal die – ohnehin nicht so doll implementierten – Planes heraus nimmt, hast 65535 Codes. Das sind 8.192 Bytes. Willst du da nicht einfach drüberhuschen?
    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: Charset eines Fonts ermitteln?

    Original von Amin Negm-Awad
    Sag mal, kannst du mit der Bitmap-Representation des Fonts und des RTF-Charsets (ich nenne das jetzt mal so, um Missverständnisse wie in meiner ersten Antwort zu vermeiden) das nicht recht schnell selbst herausfinden?

    Verstehe jetzt nicht, wie Du das meinst. Bitmap klingt nach Bildern. Soll ich eine Bildanalyse machen?

    Michael
  • RE: Charset eines Fonts ermitteln?

    Original von Michael
    Original von Amin Negm-Awad
    Sag mal, kannst du mit der Bitmap-Representation des Fonts und des RTF-Charsets (ich nenne das jetzt mal so, um Missverständnisse wie in meiner ersten Antwort zu vermeiden) das nicht recht schnell selbst herausfinden?

    Verstehe jetzt nicht, wie Du das meinst. Bitmap klingt nach Bildern. Soll ich eine Bildanalyse machen?

    Michael


    nein, eine bitmap (bit-map) ist eben eine folge von bits. in dem fall eben maximal 65536 stück was eine größe von 8192 byte ergeben würde
  • RE: Charset eines Fonts ermitteln?

    Original von Michael
    Original von Amin Negm-Awad
    Sag mal, kannst du mit der Bitmap-Representation des Fonts und des RTF-Charsets (ich nenne das jetzt mal so, um Missverständnisse wie in meiner ersten Antwort zu vermeiden) das nicht recht schnell selbst herausfinden?

    Verstehe jetzt nicht, wie Du das meinst. Bitmap klingt nach Bildern. Soll ich eine Bildanalyse machen?

    Michael

    Neee, ich meine die Bitmap das Covered-Character-Sets. Ohne je damit gearbeitet zu haben, hast du da für jeden Code-Point ein Bit, welches angibt, ob der Code-Point im Font vorhanden ist. Wenn du dir selbst für die entsprechenden RTF-Charstets eine solche Bitmap machst, dann musst du die nur übereinander legen, um zu sehen, ob der RFT-Charset zu deinem Text passt, sich also dein Text in dem RTF-Charset kodieren lässt.

    Es müsste doch ohnehin mehrere einschlägige RTF-Charsets geben, oder?
    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"?
  • Original von hns
    Warum machst Du Dir diese Mühe? Es gibt beim NSAttributedString eine schöne Methode und die heisst:

    Quellcode

    1. -[NSAttributedString RTFFromRange:documentAttributes:]


    Die erzeugt gleich RTF aus Unicode.

    Ich denke, dass der Michael diese kennt. Er muss halt selbst RTF erzeugen, denke ich.
    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"?