Кодирование AVMetadataItem - PullRequest
       15

Кодирование AVMetadataItem

4 голосов
/ 13 марта 2012

У меня есть AVMetadataItem, поля которого закодированы в CP1251 (кириллица). После прочтения item.stringValue я получаю мусор - неправильно закодированную строку. Я попытался преобразовать эту строку в сырой UTF8, а затем создать новую строку с использованием кодировки CP1251 - не повезло, результат равен нулю. Попытался взять item.dataValue - без кубиков, он содержит необработанные данные списка (начиная с bplist ...).

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

Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 15 июня 2016

Swift 2.0 решение:

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

let convertedTitleMeta: String = String(data: origMeta, encoding: NSUTF8StringEncoding)!
2 голосов
/ 10 февраля 2017

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

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)
    }
}
2 голосов
/ 21 марта 2012

Я закончил тем, что использовал NSPropertyListReader_binary1 Майка Эша и получил необработанные данные, а затем обработал их так, чтобы NSString использовал их для кодирования.

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

1 голос
/ 07 февраля 2017

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)!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...