Si les données ne sont pas à terminaison nulle, vous devez utiliser la fonction -initWithData:encoding:
NSString* newStr = [[NSString alloc] initWithData:theData encoding:NSUTF8StringEncoding];
Si les données sont de type null-terminated, vous devez plutôt utiliser -stringWithUTF8String:
pour éviter les frais supplémentaires \0
à la fin.
NSString* newStr = [NSString stringWithUTF8String:[theData bytes]];
(Notez que si l'entrée n'est pas correctement encodée en UTF-8, vous obtiendrez nil
.)
Variante rapide :
let newStr = String(data: data, encoding: .utf8)
// note that `newStr` is a `String?`, not a `String`.
Si les données sont terminées par un caractère nul, vous pouvez utiliser la méthode sûre qui consiste à supprimer le caractère nul, ou la méthode non sûre similaire à la version Objective-C ci-dessus.
// safe way, provided data is \0-terminated
let newStr1 = String(data: data.subdata(in: 0 ..< data.count - 1), encoding: .utf8)
// unsafe way, provided data is \0-terminated
let newStr2 = data.withUnsafeBytes(String.init(utf8String:))
16 votes
UTF-8 est UTF-8 partout. Une fois que c'est UTF-8, il n'y a pas de valeurs différentes pour les différentes plateformes. C'est là tout l'intérêt.