我需要解码一个我不知道字节数的 UTF-8 编码字符串。我确实知道字符数。
根据字节数,我会这样做:
NSString(bytes: UnsafePointer<Byte>(bytes),
length: byteCount,
encoding: String.Encoding.utf8.rawValue)
如何使用字符数来代替?
最佳答案
一个可能的解决方案是使用 UTF-8 UnicodeCodec
进行解码
字节,直到达到所需的字符数
(或者发生错误):
func decodeUTF8<S: Sequence>(bytes: S, numCharacters: Int) -> String
where S.Iterator.Element == UInt8 {
var iterator = bytes.makeIterator()
var utf8codec = UTF8()
var string = ""
while string.characters.count < numCharacters {
switch (utf8codec.decode(&iterator)) {
case let .scalarValue(val):
string.unicodeScalars.append(val)
default:
// Error or out of bytes:
return string
}
}
return string
}
(您还可以返回 nil
或在错误情况下抛出错误。)
示例:
let bytes = "H€llo".utf8
let dec = decodeUTF8(bytes: bytes, numCharacters: 3)
print(dec) // H€l
关于swift - 如何在知道字符数但不知道字节数的情况下解码 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41334803/