将Byte数组转换为字符串的Swift方法

3
我无法在Swift中将以下字节数组转换为字符串。
let chars: [UInt8] =  [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0]

let datastring = NSString(data: chars, encoding: NSUTF8StringEncoding)

但在安卓中它可以正常工作,我不知道Swift有什么问题。

抱歉,这是一个打字错误。现在我已经更新了问题。 - nik
1
你有收到任何错误吗?那确实是UTF-8吗? - Thilo
你使用的是哪个版本的Swift? - ljk321
3个回答

6

[UInt8] 不是 NSData,因此无法使用 NSString(data... 初始化器。

您可以使用以下方式:

let chars: [UInt8] =  [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0]
let count = chars.count / sizeof(UInt8)
let datastring = NSString(bytes: chars, length: count, encoding: NSASCIIStringEncoding)

在Swift 3中,由于本地的String可以用一系列字节初始化,因此事情变得更加容易了。
let datastring = String(bytes: chars, encoding: .utf8)

然而,这个例子并不具有意义,因为它不代表一个字符串,所以datastring将会是nil。请使用有效的数据,例如:
let chars : [UInt8] = [72, 101, 108, 108, 111]
let datastring = String(bytes: chars, encoding: .utf8) // "Hello"

4
在Swift 3中,您可以使用以下方法:
import Foundation
let chars: [UInt8] =  [255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0]
let string = String(data: Data(chars), encoding: .utf8)

5
更通俗易懂的表述:使用UTF-8编码将字符数组转换为字符串:String(bytes: chars, encoding: .utf8) - Martin R
@MartinR 感谢您的回答。您应该考虑将其添加到您自己的内容中。 - Sankar
3
它返回了一个空字符串(nil)。你能告诉我为什么吗? - Shubham Agarwal Bhewanewala
得到了空字符串。还有其他解决方案吗? - Kiran Patil
同时获取到了空字符串。 - Yanay Hollander

0

let str = String(decoding: chars, as: UTF8.self) - 将错误的字节替换为0xfffd let str = chars.map { String(UnicodeScalar($0)) }.joined()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接