Pergunta

Eu tenho um AVMetadataItem que possui campos codificados em CP1251 (cirílico).Depois de ler item.stringValue recebo lixo - string codificada incorretamente.Tentei converter essa string em UTF8 bruto e, em seguida, criar uma nova string usando a codificação CP1251 - sem sorte, o resultado é nulo.Tentei pegar o item.dataValue - sem dados, ele contém dados brutos de uma lista (começando com bplist...).

Qualquer ideia é muito apreciada.

Desde já, obrigado.

Foi útil?

Solução 2

Eu acabei usando o nspropertylistreader_binary1 do Mike Ash e obtendo os dados brutos e, em seguida, manguitando-o para que nsstring fosse codificando.

horrível - mas trabalhou.

Outras dicas

Solução Swift 2.0:

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

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

Eu tenho a extensão AVMetadataItem para isso:

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

Solução Swift 3.0:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top