die Konvertierung eines NSString mit Sonderzeichen zu einem CString
Habe ich ein NSString mit einem Wert von Jose (Akzent auf dem e). Ich versuche, Sie zu konvertieren in einen C-string wie folgt:
char str [[myAccentStr length] + 1];
[myAccentStr getCString:str maxLength:[myAccentStr length] + 1 encoding:NSUTF32StringEncoding];
aber str endet als eine leere Zeichenfolge. Was gibt? Ich habe versucht, UTF8 und UTF16 zu. Es wird übergeben, um eine andere Funktion später auf und wenn, dass funcsion Anrufe lstrlen es auf die Größe kommt als null.
- Während der Suche im apple-dev-Foren, fand ich etwas sagte mir, ich solle versuchen, mit den NSMacOSRomanStringEncoding. Ich habe versucht, und das ist näher, aber noch nicht ganz dort - bekomme ich die Zeichenfolge minus das Zeichen mit Akzenten(z.B. Jos anstelle von Jose).
- Haben Sie versucht, mit
[str UTF8String]
? Das ist der häufigste Weg, die Menschen zu konvertieren eine NSString* auf ein CString. - Ich habe nicht versucht, aber stellt sich heraus, ich habe andere Probleme. Die Antwort unten hat mich die erste Hürde.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den docs für NSString getCString:maxLength:Codierung sagt:
Über die NSString-Methode dataUsingEncoding:allowLossyConversion: funktioniert der trick. Hier ein code Beispiel:
Die Ausgabe von NSLog ist:
Bisher habe ich nur gesehen, dass dieses ordnungsgemäß funktioniert, wenn es mit der NSMacOSRomanStringEncoding.
Bearbeiten
Ändern dies zu einer community-wiki. Bitte fühlen Sie sich frei zu Bearbeiten.
hooleyhoop hatte einige gute Punkte, so dass ich dachte, ich würde versuchen, den code, dass ist so ausführlich wie möglich. Wenn ich etwas fehlt, bitte jemand Glockenspiel in.
Auch - Nicht sicher, warum [NSString canBeConvertedToEncoding:] ist die Rückkehr JA auch wenn die [NSString getCString:maxLength:Codierung:] - Funktion ist definitiv nicht richtig funktioniert (wie gesehen von der Ausgabe).
Hier ist etwas code, um Hilfe bei der Analyse, was funktioniert /was nicht:
Ergebnisse:
[aString length]
gibt die Anzahl der Zeichen. In Ihrem Fall ist dies 4.Können Sie konvertieren Sie Ihre string in einen c-string genau mit, zum Beispiel NSUTF8StringEncoding, NSUTF16StringEncoding, NSUTF32StringEncoding. Die Länge in bytes wäre 5, 8, 16 bzw.
Für die Konvertierung Zwecke, die Sie verwenden sollten
-maximumLengthOfBytesUsingEncoding
statt-lengthOfBytesUsingEncoding
Immer überprüfen, dass die Wandlung gültig ist, mit
-canBeConvertedToEncoding
Gibt es gute Gründe für die Verwendung von NSString