如何解码UTF-8知道字符数而不是字节数?

时间:2016-12-26 18:10:10

标签: swift encoding utf-8

我需要解码一个UTF-8编码的字符串,我不知道字节数。我知道人物数量。

使用字节数,我会这样做:

NSString(bytes:    UnsafePointer<Byte>(bytes),
         length:   byteCount,
         encoding: String.Encoding.utf8.rawValue)

如何使用字符数呢?

1 个答案:

答案 0 :(得分:3)

一种可能的解决方案是使用UTF-8 null进行解码 字节,直到达到所需的字符数 (或发生错误):

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