Ich habe UTF-8 NSData
vom Windows-Server codiert und möchte es NSString
für das iPhone konvertieren . Wie konvertiere ich Daten in Zeichenfolgen, da Daten Zeichen (wie ein Gradsymbol) enthalten, die auf beiden Plattformen unterschiedliche Werte haben ?
567
Antworten:
Wenn die Daten nicht nullterminiert sind, sollten Sie verwenden
-initWithData:encoding:
Wenn die Daten nullterminiert sind, sollten Sie stattdessen verwenden
-stringWithUTF8String:
, um das Extra\0
am Ende zu vermeiden .(Beachten Sie, dass Sie erhalten, wenn die Eingabe nicht ordnungsgemäß UTF-8-codiert ist
nil
.)Schnelle Variante:
Wenn die Daten nullterminiert sind, können Sie den sicheren Weg gehen, bei dem das Nullzeichen entfernt wird, oder den unsicheren Weg, der der obigen Objective-C-Version ähnelt.
quelle
Sie können diese Methode aufrufen
quelle
NSData
, wie viele Bytes es hat ...NSData
zu einer zuNSString
wechseln (siehe KennyTMs Antwort), bin ich überrascht, dass es keine gibt,+(id)stringWithUTF8Data:(NSData *)data
die einfach funktioniert.Ich reiche demütig eine Kategorie ein, um dies weniger ärgerlich zu machen:
und
(Beachten Sie, dass Sie
autorelease
dort eine benötigen, wenn Sie ARC nicht verwenden .)Jetzt anstelle der entsetzlich ausführlichen:
Du kannst tun:
quelle
Die Swift-Version von String zu Data und zurück zu String:
Xcode 10.1 • Swift 4.2.1
Spielplatz
quelle
Manchmal funktionieren die Methoden in den anderen Antworten nicht. In meinem Fall generiere ich eine Signatur mit meinem privaten RSA-Schlüssel und das Ergebnis ist NSData. Ich fand, dass dies zu funktionieren scheint:
Ziel c
Schnell
quelle
[[NSData alloc] initWithBase64EncodedString:signatureString options:0]
; Swift :NSData(base64EncodedString: str options: nil)
Um es zusammenzufassen, hier ist eine vollständige Antwort, die für mich funktioniert hat.
Mein Problem war das, als ich es benutzte
Die Saite, die ich bekam, war unvorhersehbar: Zu etwa 70% enthielt sie den erwarteten Wert, aber zu oft führte sie zu
Null
oder noch schlimmer: am Ende der Saite gekleidet.Nach einigem Graben wechselte ich zu
Und bekam jedes Mal das erwartete Ergebnis.
quelle
Mit Swift 5, können Sie
String
‚sinit(data:encoding:)
initializer, um eine konvertierenData
Instanz in eineString
Instanz UTF-8 verwenden.init(data:encoding:)
hat die folgende Erklärung:Der folgende Spielplatzcode zeigt, wie man ihn benutzt:
quelle