Emoji aus NSString entfernen

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

  • Emoji aus NSString entfernen

    in einem TextView gibt der User in beliebiger Sprache einen Text ein.

    Dieser Text ist dann einer von vielen Parametern in einer URL.
    (ich habe auf das weitere Handling keinen Einfluss, der Server, der die URL erhält, ist nicht von mir :rolleyes: )

    Wie muss ich jetzt den NSString bearbeiten, damit evtuelle Emojis rausgefiltert werden, aber Umlaute im String bleiben?

    C-Quellcode

    1. NSString *escapedString = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

    das filtert zwar die Emojis raus, aber eben die Umlaute auch (wobei UTF8 auch nicht richtig sein kann :/ )

    im weiteren verlauf baue ich dann aus den Strings die URL zusammen

    C-Quellcode

    1. NSURL *urlMatch = [NSURL URLWithString: ....
    wenn da ein ein Emoji in einem Ring drin ist, steht nur noch nil in urlMatch

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


    Hape42
  • MCDan schrieb:

    Versuche es mal mit NSURLComponents. Damit kannst Du die URL aus Base URL und queryItems zusammenstellen und dann eine passend codierte URL erhalten.
    Probiere ich heute Abend auch mal aus.

    Aber für das Ursprungsproblem "Emoji aus NSString entfernen" habe ich immer noch keine Idee
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • hape42 schrieb:

    Aber für das Ursprungsproblem "Emoji aus NSString entfernen" habe ich immer noch keine Idee
    Wenn Du grundsätzlich auf "multi-byte character" verzichten kannst - was ich vermute, schau mal hier nach: Den Weg über Character-Längen finde ich ganz charmant, braucht man doch keinen Unicode-Pages angeben. Hat eben alles Vor- und Nachteile.

    Übrigens ungetestet, aber schreit nach einer NSString-Kategorie.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Wolf schrieb:

    Nach dem Escapen, gibt es keine ungültigen Zeichen mehr.
    Abgesehen von vier Hex-Werten, die zwar escaped wurden, mit denen das Backend aber trotzdem umgehen muss. Aber das war wie gesagt nur eine Vermutung, @hape42 wird schon einen Grund haben, warum er die Emojis nicht einfach encoded, sondern diesen Thread startet...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Tja…
    … nach dem Escapen, hat es nur noch normale Character. was das Backend dann hier rein interpretiert, ist eine andere Sache.

    Was Thallius meinte, kann ich nicht nachvollziehen, Ein String ist ein String, und der muss zum Zeichensatz passen. Sehe keinen grund weshalb eine URL nicht in UTF-16 oder UTF-32 kodiert sein sollte.
  • Wolf schrieb:

    hape42 schrieb:

    .Aber für das Ursprungsproblem "Emoji aus NSString entfernen" habe ich immer noch keine Idee
    Wo ist denn das Problem? Die Emoji’s sind doch norme Unicode Zeichen. Die werden Escaped und gut ist‘s.
    Das Problem ist, dass ich sehr wahrscheinlich "nur" auf dem Schlauch stehe wenn ich Eure Antworten so lese. <X

    Mal ganz konkret gefragt: Wie bekomme ich aus dem NSString @"Test :whistling: möchte üben" den NSString @"Test m\U00f6chte \U00fcben"
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • hape42 schrieb:

    Mal ganz konkret gefragt: Wie bekomme ich aus dem NSString @"Test :whistling: möchte üben" den NSString @"Test m\U00f6chte \U00fcben"
    Mal quick & dirty auf Basis des oben verlinkten Artikels:

    Quellcode

    1. NSString *unicodeString = @"Test möchte üben";
    2. NSMutableString *result = [NSMutableString new];
    3. for (NSUInteger index = 0; index < unicodeString.length; index++)
    4. {
    5. NSString *subStr = [unicodeString substringWithRange:NSMakeRange(index, 1)];
    6. if (subStr.UTF8String != NULL && strlen(subStr.UTF8String) <= 1)
    7. {
    8. [result appendString:subStr];
    9. }
    10. else
    11. {
    12. unichar uniChar = [subStr characterAtIndex:0];
    13. NSString *unicodeHex = [NSString stringWithFormat:@"\\U%04x", uniChar].uppercaseString;
    14. [result appendString:unicodeHex];
    15. }
    16. }
    17. NSLog(@"Result: %@", result);
    Alles anzeigen
    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.

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

  • Der Schlauch war doch größer als ich dachte :saint:

    Ich suchte ganz verbissen nach etwas wie zum Beispiel "NSString* escapedString = [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];" das eben meine Bedürfnisse deckt und ich bin nur zu doof es zu finden.

    Auf den String Zeichen für Zeichen selbst auseinander nehmen bin ich nicht gekommen :rolleyes:

    Danke Mattes für den tritt in Hintern. :thumbup:
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • MyMattes schrieb:

    Wolf schrieb:

    Wo ist denn das Problem? Die Emoji’s sind doch norme Unicode Zeichen. Die werden Escaped und gut ist‘s.
    Vielleicht ein (fremdes) Backend, das nur UTF-8 kann? Einfach mal geraten...
    Mattes
    Das fremde Backend (dailygammon.com) will tatsächlich NSISOLatin1StringEncoding

    Ich hatte die Schnauze voll und einfach mal solange probiert bis das auf der anderen Seite richtig ankam :whistling:

    Danke an alle, Probleme sind gelöst
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42