3

I'm using code below:

AVMetadataItem *item = [self.player.metaData objectAtIndex:0];
NSLog("%@", item.stringValue);

Its works good with any english song title. But, when i'm getting russian song title from AVMetadataItem:

ÐÐÐÐРÐЯ - ÐРСÐРÐÐÐТÐÐУ // СÐУШÐЮТ: 1585

How can i get something like:

Тратата - мы везем с собой кота.

Any help appreciated.

Slava Vedenin
  • 58,326
  • 13
  • 40
  • 59
rozochkin
  • 679
  • 1
  • 7
  • 18
  • This might simply be an Xcode issue with the log. What happens if you display the value in a `UILabel` or some other UI element? – rmaddy Jul 11 '14 at 22:10
  • Same result in UILabel. Tried item.dataValue but no luck. – rozochkin Jul 11 '14 at 22:12
  • 1
    maybe the text is stored in UTF-8 (or some other) encoding? NSString stores everything in UTF-16. – kambala Jul 11 '14 at 22:17
  • tried: `for (int i = 1; i< 35; i++) { NSLog(@"%i %@", i, [[NSString alloc] initWithData:item.dataValue encoding:i]); }` but always getting (null) or bplist00o3 – rozochkin Jul 11 '14 at 22:21
  • try `NSUTF16*` and `NSUTF32*` constants (they have big integer values) – kambala Jul 11 '14 at 22:31

1 Answers1

2

Try this:

NSData *test = [item.stringValue dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:YES];
NSString *dataString = [[NSString alloc] initWithData:test encoding:NSUTF8StringEncoding];

We get meta from audio in UTF8 and don't know in what NSStringEncoding it's converted so i use:

for (i = 0; i < 15; i++) {
   NSData *test = [item.stringValue dataUsingEncoding:i allowLossyConversion:YES];
   NSString *dataString = [[NSString alloc] initWithData:test encoding:NSUTF8StringEncoding];
}

Looks like iOS encoding Cyrillic(UTF8) in ISOLatin.

never
  • 59
  • 7