NSString - characterAtIndex funktioniert gut mit ASCII-Zeichen, aber wie könnte ich das UTF8-Zeichen am Index von 2 bekommen?
- aktualisiert -
Es scheint, dass Unicar (16Bits) nicht alle UTF8-Codierungszeichenfolgen (8Bites bis 32Bites) darstellen kann. Gibt es also irgendeine Methode, um das Zeichen von NSString abzurufen?
Leider tut Daves Antwort nicht das, was Sie wollen. Der an rangeOfComposedCharacterSequenceAtIndex
angegebene Index ist ein Index einer UTF-16-Codeeinheit, 1 oder 2, oder die einen UTF-16-Codepunkt bilden. So ist 1
nicht der zweite UTF-16 Codepunkt, wenn der erste Codepunkt in der Zeichenfolge 2 Codeeinheiten benötigt ... ( rangeOfComposedCharacterSequenceAtIndex
gibt den Bereich des Codepunkts zurück, der die Codeeinheit am angegebenen Index enthält, also Wenn Ihr erstes Zeichen 2 Code-Einheiten benötigt, dann liefert die Übergabe eines Index von 0 oder 1 den gleichen Bereich.)
Wenn Sie die UTF-8-Sequenz für ein Zeichen finden möchten, können Sie UTF8String
verwenden und dann die resultierenden Bytes analysieren, um die Byte-Sequenz für das n-te Zeichen zu finden. Oder Sie können ebenfalls rangeOfComposedCharacterSequenceAtIndex
ab Index 0 verwenden und iterieren, bis Sie zum n-ten Zeichen kommen, und dann die 1 oder 2 UTF-16-Code-Einheiten in UTF-8-Code-Einheiten umwandeln.
Ich hoffe, dass wir alle etwas vermissen und das ist eingebaut ...
Ein Start (Grenzen müssen überprüft werden!) einer Kategorie, die helfen könnte:
%Vor% aber diese Art von Sachen ist effizienter mit char *
anstatt NSString
Sie würden die ausführlicheren Methoden verwenden:
%Vor% ... natürlich mit korrekten Grenzen und Reichweitenüberprüfung. Beachten Sie, dass Sie damit einen NSString , ein Objekt, keinen unichar
oder einen anderen primitiven Datentyp erhalten.
Warum versuchst du nicht so etwas zu benutzen?
%Vor%Dabei ist yourSourceString Ihr NSString-Objekt, yourRange ist ein NSRange-Objekt mit dem Index des benötigten Zeichens als Positionsparameter und einem Längenparameter von '0' (null ).
Tags und Links objective-c iphone nsstring macos