AVMetadataItem的编码

我有一个AVMetadataItem有CP1251(西里尔)编码的字段。 读取item.stringValue后,我得到垃圾 – 错误编码的string。 我已经尝试将该string转换为原始的UTF8,然后使用CP1251编码创build一个新的string – 没有运气,结果是零。 尝试采取item.dataValue – 没有骰子,它包含一个原始列表数据(从bplist …开始)。

任何想法都非常赞赏。

提前致谢。

Swift 2.0解决scheme:

let origTitleMeta: NSData = (<AVMetadataItem>.timedMetadata?.first?.stringValue?.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: true))! let convertedTitleMeta: String = String(data: origMeta, encoding: NSUTF8StringEncoding)! 

我已经结束了使用Mike Ash的NSPropertyListReader_binary1并获取原始数据,然后对其进行修改,以便NSString将它编码。

可怕的 – 但工作。

我有这个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) } } 

Swift 3.0解决scheme:

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