gpt4 book ai didi

swift - 如何解码知道字符数但不知道字节数的UTF-8?

转载 作者:可可西里 更新时间:2023-11-01 00:57:49 30 4
gpt4 key购买 nike

我需要解码 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com