Wie kann ich einen String von UTF-8 in Swift?
Wissen wir, dass wir drucken können jedes Zeichen im UTF8-code-Einheiten?
Dann, wenn wir code-Einheiten, die diese Zeichen können, wie wir erstellen eine Zeichenfolge mit Ihnen?
InformationsquelleAutor jxwho | 2014-06-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist möglich, konvertieren in UTF8-code verweist auf einen Swift String idiomatically mit der
UTF8
Swift Klasse. Obwohl es viel einfacher ist die Konvertierung von String nach UTF8!Die anderen alternativen vorgeschlagen:
Mit
NSString
ruft die Objective-C-Brücke;Mit
UnicodeScalar
ist Fehler-anfällig, weil es wandelt UnicodeScalars direkt zu Zeichen, zu ignorieren komplexe grapheme Cluster; undMit
String.fromCString
ist potenziell unsicher, wie es verwendet Zeiger.import Foundation
von oben, das ist der ganze Grund, warum ich dies nutzen wollen..Danke! Sehr hilfreich ist. Hier ist ein link auf die Sandbox in diese Arbeit mit ein paar updates gemacht und decodieren ein bisschen einfacher. swiftlang.ng.bluemix.net/#/repl/...
Deine Verwendung der Worte "Kodieren" und "Dekodieren" sind das Gegenteil von dem, wie ich denke, über die Konvertierungen zwischen strings und UTF-8-Daten.
InformationsquelleAutor Tim WB
verbessern von Martin R die Antwort
Was passiert ist, ist
Array
können automatisch konvertierenCConstVoidPointer
die verwendet werden können, zu erstellen string mitNSSString(bytes: CConstVoidPointer, length len: Int, encoding: Uint)
InformationsquelleAutor Bryan Chen
Habe ich für eine umfassende Antwort bezüglich der string-manipulation in Swift selbst. Unter Berufung auf Stimmen, um und aus
NSString
und andere unsichere Zeiger Magie war einfach nicht tun es für mich. Hier ist eine sichere alternative:Ersten, wir wollen verlängern
UInt8
. Dies ist der primitive Typ hinterCodeUnit
.Dies wird uns erlauben, so etwas zu tun:
Ausgestattet mit dieser Erweiterung können wir nun ändern von strings.
Ja, diese Annahme ist korrekt. Diese Lösung funktioniert nur für single-byte (ASCII -) Zeichen und wird schnell brechen, auf so etwas wie emoji oder internationale Zeichen.
InformationsquelleAutor dbart
Swift 3
let s = String(bytes: arr, encoding: .utf8)
InformationsquelleAutor Alex Shubin
Ich würde so etwas tun, kann es nicht so elegant als die Arbeit mit den 'Zeiger', aber es macht den job gut, das sind ziemlich genau über ein paar neue
+=
Betreiber fürString
wie:HINWEIS: Sie können erweitern die Liste der unterstützten Operatoren mit übergeordneten
+
Betreiber als auch, die Definition einer Liste der vollständig kommutativen Operatoren fürString
.und jetzt sind Sie in der Lage, fügen Sie eine
String
mit unicode (UTF-8, UTF-16 oder UTF-32) Zeichen wie z.B.:Sie sind Recht, um fair zu sein, ich bin mir nicht sicher über die eigentliche Frage entweder, der Grund ist genau das gleiche wie du gerade gesagt hast...
Beachten Sie, dass die UTF-8-Sequenz für Unicode-Codepunkt 1, 2, 3, oder 4 bytes.
InformationsquelleAutor holex
Dies ist eine mögliche Lösung (jetzt aktualisiert für Swift 2):
Innerhalb der Schließung
$0
ist einUnsafeBufferPointer<CChar>
zeigt auf das array zusammenhängenden Speicher. Aus, dass ein rascherString
erstellt werden können.Alternativ, wenn Sie lieber die Eingabe als unsigned bytes:
Ich habe gerade versucht, eine Rasche Lösung, die keine Foundation und Objective-C-Klassen...
Ich denke, die wahre Swift Weise verwenden müssen
Character
undUTF8
irgendwoInformationsquelleAutor Martin R
Wenn Sie beginnen, mit einem raw-Puffer, wie aus den Daten-Objekt zurückgegeben, die von einem Datei-handle (in diesem Fall aus einer Pipe object):
InformationsquelleAutor johnkzin
InformationsquelleAutor xohozu
Es ist Swift 3.0-version Martin R Antwort
Wenn Sie möchten, zeigen emoji von UTF-8-string nur Benutzer convertEmojiCodesToString Methode unten. Es funktioniert für Zeichenketten wie "U+1F52B" (emoji) oder "U+1F1E6 U+1F1F1" (Land-flag emoji)
InformationsquelleAutor Alex Shoshiashvili