Comment puis-je créer une chaîne à partir de UTF8 dans Swift?
Nous savons que nous pouvons imprimer chaque caractère UTF8 unités de code?
Alors, si nous avons des unités de code de ces personnages, comment pouvons-nous créer une Chaîne avec eux?
source d'informationauteur jxwho | 2014-06-28
Vous devez vous connecter pour publier un commentaire.
Il est possible de les convertir en UTF8 points de code rapidement une Chaîne idiomatique à l'aide de la
UTF8
Swift classe. Bien qu'il est beaucoup plus facile de convertir de la Chaîne UTF8!Des autres solutions proposées:
À l'aide de
NSString
appelle l'Objective-C pont;À l'aide de
UnicodeScalar
est sujette à erreur, car il convertit UnicodeScalars directement aux Personnages, ignorant complexe graphème grappes; etÀ l'aide de
String.fromCString
est potentiellement dangereux car il utilise des pointeurs.améliorer Martin de R, en réponse
Ce qui s'est passé est
Array
peut être automatique, de convertir àCConstVoidPointer
qui peut être utilisé pour créer des chaînes avecNSSString(bytes: CConstVoidPointer, length len: Int, encoding: Uint)
Swift 3
let s = String(bytes: arr, encoding: .utf8)
Je ferais quelque chose comme cela, c'est peut-être pas élégant que de travailler avec des "pointeurs", mais il le fait bien le travail, ceux-ci sont assez bien sur un tas de nouvelles
+=
opérateurs pourString
comme:REMARQUE: vous pouvez étendre la liste des opérateurs pris en charge au remplacement
+
opérateur ainsi, la définition d'une liste de l'commutative opérateurs pourString
.et maintenant vous êtes en mesure d'ajouter un
String
avec une unicode (UTF-8, UTF-16 ou UTF-32) personnage comme par exemple:C'est une solution possible (maintenant mis à jour pour Swift 2):
À l'intérieur de la clôture,
$0
est unUnsafeBufferPointer<CChar>
pointant vers la matrice de stockage contigu. De ce qu'un SwiftString
peut être créé.Alternativement, si vous préférez l'entrée comme unsigned octets:
Si vous êtes débutant avec un raw tampon, tels que de l'objet de Données retourné à partir d'un descripteur de fichier (dans ce cas, prises à partir d'un Tuyau d'objet):
J'ai été à la recherche d'une réponse globale concernant à la manipulation de chaînes de Swift moi-même. En s'appuyant sur la fonte et de
NSString
et d'autres dangereux pointeur de la magie n'était tout simplement pas le faire pour moi. Voici une alternative sûre:Tout d'abord, nous voulons étendre
UInt8
. C'est le type primitif derrièreCodeUnit
.Cela va nous permettre de faire quelque chose comme ceci:
Équipé avec cette extension, nous pouvons maintenant modifier les chaînes.
Il est rapide, version 3.0 de Martin R réponse
Si vous souhaitez afficher les émoticônes de chaîne UTF-8, tout utilisateur convertEmojiCodesToString méthode ci-dessous. Il fonctionne correctement pour les chaînes de caractères comme "U+1F52B" (émoticônes) ou "U+1F1E6 U+1F1F1" (drapeau du pays emoji)