NSString, NSScanner und die Unicode Zeichen 'ZERO WIDTH NON-JOINER' (U+200C) und 'ZERO WIDTH JOINER' (U+200D)

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

  • NSString, NSScanner und die Unicode Zeichen 'ZERO WIDTH NON-JOINER' (U+200C) und 'ZERO WIDTH JOINER' (U+200D)

    Ich stieß auf folgendes Verhalten:



    Der Aufruf der iNSString-Instanzenmethode -rangeOfString:@">" options:0 range:<aRange> überliest das gesuchte Zeichen '>', wenn dem Zeichen eines der beiden Unicode-Zeichen (U+200C oder U+200D) folgt.

    Da Instanzen der Klasse NSScanner die Methode bei -scanString:intoString: und -scanUptoString:intoString: verwenden zeigen auch sie dieses Verhalten.



    IST DIES KORREKT ?




    Beispiel1:

    NSScanner *scanner = [NSScanner scannerWithString:@"<span>\u200C …"];

    [scanner scanUpToString:@">" intoString:NULL]; // Findet scanner das Zeichen nicht, so liest er alles ein.

    if([scanner isAtEnd])

    NSLog(@"NSScanner-Instanz überliest \'>\', wenn ihm das Zeichen U+200C folgt.");




    Beispiel2:

    NSScanner *scanner = [NSScanner scannerWithString:@"<span>\u200D …"];

    NSRange rg = [[scanner string] rangeOfCharacterFromSet:[NSCharacter characterSetWithCharacterInString:@">"]];

    [scanner setScanLocation:rg.location];

    if(![scanner scanString:@">" intostring:NULL])

    NSLog(@"NSScanner-Instanz findet \'>\' nicht, wenn ihm das Zeichen U+200D folgt.");