Pregunta

Tengo un avmeTadataItem que tiene campos codificados en CP1251 (Cirílico).Después de leer el elemento.stringValue, obtengo basura - cadena codificada incorrectamente. He intentado convertir esa cadena a UTF8 RAW y luego creando una nueva cadena usando la codificación CP1251, sin suerte, el resultado es NIL.Intenté tomar el artículo.datavalue: sin dados, contiene datos de lista en bruto (comenzando con BPLIST ...).

Cualquier idea es muy apreciada.

gracias de antemano.

¿Fue útil?

Solución 2

He terminado utilizando la NSPROPERTYLISTREADER_BINARY1 de MIKE CESH y obteniendo los datos en bruto y luego se la fortalece para que NSString sea la codificación.

horrible - pero trabajé.

Otros consejos

Solución SWIFT 2.0:

let origTitleMeta: NSData = (<AVMetadataItem>.timedMetadata?.first?.stringValue?.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: true))!

let convertedTitleMeta: String = String(data: origMeta, encoding: NSUTF8StringEncoding)!

Tengo una extensión AvmeTadataItem para esto:

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 SOLUCIÓN:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top