Codifica di avmetadataitem.
-
12-12-2019 - |
Domanda
Ho un avmetadataitem che ha campi codificati in CP1251 (cirillico).Dopo aver letto item.StringValue ottengo la spazzatura - stringa codificata in modo errato. Ho provato a convertire quella stringa in RAW UTF8 e quindi creando una nuova stringa usando la codifica CP1251 - senza fortuna, il risultato è NIL.Ho provato a prendere l'oggetto.DataValue - nessun dado, contiene dati di elenco RAW (iniziando con Bplist ...).
Qualsiasi idea è molto apprezzata.
Grazie in anticipo.
Soluzione 2
Ho finito per usare il nspropertylistreader_binary di Mike Ash1 e ottenere i dati grezzi e poi mangialo in modo che NSString sarebbe che è codifica.
orribile - ma ha funzionato.
Altri suggerimenti
Swift 2.0 Soluzione:
let origTitleMeta: NSData = (<AVMetadataItem>.timedMetadata?.first?.stringValue?.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: true))!
let convertedTitleMeta: String = String(data: origMeta, encoding: NSUTF8StringEncoding)!
. Ho un'estensione AvmetadaTataItem per questo:
extension AVMetadataItem {
/// stringValue: ISO-8859-1 → UTF-8
var utf8String: String? {
guard let data = stringValue?.data(using: String.Encoding.isoLatin1, allowLossyConversion: true) else {
return nil
}
return String(data: data as Data, encoding: String.Encoding.utf8)
}
}
. Swift 3.0 Soluzione:
let data: Data = item.timedMetadata!.first!.stringValue.data(using: String.Encoding.isoLatin1, allowLossyConversion: true)!
let title: String = String(data: data as Data, encoding: String.Encoding.utf8)!
.