/ / Ako dekódovať utf-8 známy počet znakov, ale nie počet bytov? - rýchle, kódovanie, utf-8

Ako dekódovať poznať počet znakov utf-8, ale nie počet bajtov?-swift, kódovanie utf-8

Potrebujem dekódovať utf-8-kódovaný reťazec, o ktorom neviem, počítanie byte. Poznám poznámku.

S počtom bajtov by som to urobil:

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

Ako môžem použiť namiesto toho počet znakov?

odpovede:

3 pre odpoveď č. 1

Možným riešením je použitie utf-8 UnicodeCodec dekódovať bajtov, kým sa nedosiahne požadovaný počet znakov (alebo sa vyskytne chyba):

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
}

(Môžete sa tiež vrátiť nil alebo chyba v chybe.)

Príklad:

let bytes = "H€llo".utf8
let dec = decodeUTF8(bytes: bytes, numCharacters: 3)
print(dec)  // H€l