Liest das UTF8-Zeichen in der angegebenen Position von einem NSString

8
%Vor%

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?

    
xhan 24.02.2011, 03:23
quelle

3 Antworten

6

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

    
CRD 24.02.2011, 06:42
quelle
4

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.

    
Dave DeLong 24.02.2011 05:09
quelle
0

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 ).

    
rubybeginner 04.08.2014 08:34
quelle

Tags und Links