Вопрос

У меня есть AvmetAdataTeM, который имеет поля, закодированные в CP1251 (кириллице).После прочтения элемента .stringvalue Я получаю мусор - неправильно закодированную строку. Я попытался преобразовывать эту строку в RAW UTF8, а затем создавая новую строку с помощью кодировки CP1251 - не удачи, результат является Nil.Пробовал взять на себя item.datavalue - нет костей, он содержит данные необработанного списка (начиная с BPLIST ...).

Любые идеи очень ценится.

Спасибо заранее.

Это было полезно?

Решение 2

Я оказался использовать NSPROPERTYLISTREADREADREADER_BINADER1 Mike Ash и получать необработанные данные, а затем покинуть его, чтобы NsString это будет кодировать.

ужасно - но работал.

Другие советы

Swift 2.0 Решение:

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

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

У меня есть расширение AvmetAdataTeM для этого:

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 Решение:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top