Encoding of AVMetadataItem

末鹿安然 提交于 2020-01-01 12:11:21

问题


I have a AVMetadataItem which has fields encoded in CP1251 (Cyrillic). After reading item.stringValue I get garbage - incorrectly encoded string. I've tried converting that string to raw UTF8 and then creating a new string using the CP1251 encoding - no luck, result is nil. Tried taking the item.dataValue - no dice, it contains a raw list data (starting with bplist...).

Any ideas are very appreciated.

Thanks in advance.


回答1:


Swift 2.0 solution:

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

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



回答2:


I've ended up using Mike Ash's NSPropertyListReader_binary1 and getting the raw data and then mangling it so that NSString would it it's encoding.

Horrible - but worked.




回答3:


I have AVMetadataItem extension for this:

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



回答4:


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


来源:https://stackoverflow.com/questions/9676232/encoding-of-avmetadataitem

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!