4

我有一个 AVMetadataItem,它的字段以 CP1251(西里尔文)编码。阅读 item.stringValue 后,我得到垃圾 - 编码错误的字符串。我尝试将该字符串转换为原始 UTF8,然后使用 CP1251 编码创建一个新字符串 - 不走运,结果为零。尝试获取 item.dataValue - 没有骰子,它包含原始列表数据(以 bplist 开头......)。

任何想法都非常感谢。

提前致谢。

4

4 回答 4

3

斯威夫特 2.0 解决方案:

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

let convertedTitleMeta: String = String(data: origMeta, encoding: NSUTF8StringEncoding)!
于 2016-06-15T08:44:08.207 回答
2

我最终使用了 Mike Ash 的 NSPropertyListReader_binary1 并获取原始数据,然后对其进行修改,以便 NSString 对其进行编码。

可怕 - 但有效。

于 2012-03-20T20:20:24.497 回答
2

我为此有 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)
    }
}
于 2017-02-10T19:17:22.023 回答
1

斯威夫特 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)!
于 2017-02-07T08:46:53.030 回答