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.

È stato utile?

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)!
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top