Question

J'ai un avetadataitem qui a des champs codés dans CP1251 (Cyrillic).Après avoir lu l'élément.stringvalue, je reçois des ordures - une chaîne incorrectement codée. J'ai essayé de convertir cette chaîne à Raw UTF8, puis de créer une nouvelle chaîne à l'aide du codage CP1251 - pas de chance, le résultat est nul.Essayé de prendre l'article.DataValue - pas de dés, il contient une liste de liste brute (commençant par BPList ...).

Les idées sont très appréciées.

Merci d'avance.

Était-ce utile?

La solution 2

J'ai fini par utiliser Nspropertylistreader_binary1 de Mike Ash d'Ash et obtenez les données brutes, puis le gérer ainsi de sorte que NSString pourrait-il coder.

horrible - mais travaillé.

Autres conseils

Solution SWIFT 2.0:

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

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

J'ai une extension AVMETADATAITEM pour cette:

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

STAND SWIFT 3.0 Solution:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top