Emoji in HTML Entity wandeln

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

  • Emoji in HTML Entity wandeln

    ich brauche eine Methode um beliebige Emojis in eine HTML Entity zu wandeln.
    Beispiel: für ""; soll "" zurück kommen.
    Beispiel: für ""; soll "" zurück kommen.
    Nach ewigem rum-googeln habe ich das zusammen gebaut.


    C-Quellcode

    1. - (NSString *)convertEmojiToHTMLEntity:(NSString *)emoji {
    2. NSData *emojiData = [emoji dataUsingEncoding:NSUTF32StringEncoding];
    3. if (!emojiData) {
    4. return nil;
    5. }
    6. uint32_t codepoint;
    7. [emojiData getBytes:&codepoint length:sizeof(codepoint)];
    8. NSString *htmlEntity = [NSString stringWithFormat:@"&#%d;", codepoint];
    9. return htmlEntity;
    10. }
    aber da kommt leider "" zurück.
    Wenn ich mit dem Encoding rumspiele, kommen noch wildere Sachen raus. Der Ansatz scheint nicht richtig zu sein.

    Ich brauche aber die Werte in der Form wie oben beschrieben.

    hat jemand eine Idee?`
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von hape42 ()

  • Emojis bestehen häufig nicht nur aus einem 32-Bit-Zeichen sondern können auch aus mehreren Zeichen bestehen. Typisches Beispiel sind die verschiedenen Hand-Emojis in den verschiedenen Hauttönen verschieden von „Simpsons“-Gelb. Wahrscheinlich stellst du diese Emojis in HTML durch mehrere aufeinanderfolgende Entities dar. Vielleicht findest du zum Stichwort ZWJ = Zero Width Joiner etwas, was dir weiterhilft.

    BTW: Diese Mehrzeichen-Emojis sind mit ein Grund, warum die Zeichenkettenverarbeitung in Swift so unheimlich einfach ist.
    „Meine Komplikation hatte eine Komplikation.“
  • ich schicke auf einer Webseite (dailygammon.com) (leider nicht meine) texte weg. Wenn die einEmoji enthalten, kommt beim Empfänger der code an.

    ich sehe grad, dass die forumsoftware manche Details die ich beschreiben wollte, auch einfach irgendwie gewandelt hat :saint:
    ich versuche das mal zu bearbeiten. in der Vorschau war es noch richtig :whistling:
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von hape42 ()

  • macmoonshine schrieb:

    Wahrscheinlich stellst du diese Emojis in HTML durch mehrere aufeinanderfolgende Entities dar. Vielleicht findest du zum Stichwort ZWJ = Zero Width Joiner etwas, was dir weiterhilft
    Das hat mich auch interessiert und ich habe mit diesem Hinweis einmal etwas probiert.

    @hape42: Ich denke, Du musst vor allem oben ein anders Encoding ("NSUTF32LittleEndianStringEncoding") nutzen, um die Bytereihenfolge auf iOS / macOS zu berücksichtigen...

    Wenn ich die einzelnen Codepoints mit ZWJ verbinde, erhalte ich zwar plausible Ergebnisse (z. B. Handzeichen + Hauttyp), allerdings setzt Safari 17.4.1 (macOS) diese nicht um ... sollte es das überhaupt?

    Hier mal mein Code-Snippet zum weiteren Probieren (stellt Euch als Eingangsstring z. B. eine blasshäutige Pommesgabel vor):

    Quellcode

    1. NSString *emoji = @"";
    2. NSData *emojiData = [emoji dataUsingEncoding:NSUTF32LittleEndianStringEncoding];
    3. if (!emojiData) {
    4. NSLog(@"No emojiData");
    5. }
    6. else
    7. {
    8. NSLog(@"emojiData: %@", emojiData);
    9. NSMutableString *htmlString = [NSMutableString stringWithString:@""];
    10. uint32_t codepoint;
    11. NSRange codepointRange = NSMakeRange(0, sizeof(codepoint));
    12. while (codepointRange.location + codepointRange.length <= emojiData.length)
    13. {
    14. [emojiData getBytes:&codepoint range:codepointRange];
    15. if (codepointRange.location > 0)
    16. {
    17. [htmlString appendFormat:@"&zwf;"];
    18. }
    19. [htmlString appendFormat:@"&#%d;", codepoint];
    20. codepointRange.location += codepointRange.length;
    21. }
    22. NSLog(@"htmlString: %@", htmlString);
    23. }
    Alles anzeigen
    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • MyMattes schrieb:

    Wenn ich die einzelnen Codepoints mit ZWJ verbinde, erhalte ich zwar plausible Ergebnisse (z. B. Handzeichen + Hauttyp), allerdings setzt Safari 17.4.1 (macOS) diese nicht um ... sollte es das überhaupt?
    Arghh ... blödes Beispiel: Ausgerechnet Skintones nutzen kein ZWJ (hier das entsprechende ISO-Arbeitsdokument). Andere Gruppierungen sehr wohl. Wenn man in meinem Beispielcode den ZWJ weglässt, funktionieren zumindest die häufigsten Emojis wie auch die genannte blasse Pommesgabel.

    @hape42: Ich glaube, Du musst mit einer gewissen Lücke leben, zumindest was ZWJ-Kombinationen angeht. Vielleicht ist ein einfaches Verketten der Codepoints "good enough"...?

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.