AVMetadataItem Encoding

I have an AVMetadataItem that has fields encoded in CP1251 (Cyrillic). After reading item.stringValue, I get garbage - a badly encoded string. I tried to convert this string to raw UTF8, and then create a new string using CP1251 encoding - no luck, the result is zero. I tried to take item.dataValue - there are no cubes, it contains raw list data (starting with bplist ...).

Any ideas are greatly appreciated.

Thanks in advance.

+4
source share
4 answers

I ended up using Mike Ash NSPropertyListReader_binary1 and received raw data, and then distorted it so that NSString encoded it.

Awful - but it worked.

+2
source

Swift 2.0 solution:

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

I have an 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) } } 
+2
source

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)! 
+1
source

Source: https://habr.com/ru/post/1401068/


All Articles