【问题标题】:NSString iOS Russian encodingNSString iOS 俄语编码
【发布时间】:2014-07-11 22:01:36
【问题描述】:

我正在使用以下代码:

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

它适用于任何英文歌曲标题。 但是,当我从 AVMetadataItem 获得俄语歌曲标题时:

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

我怎样才能得到类似的东西:

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

任何帮助表示赞赏。

【问题讨论】:

  • 这可能只是日志的 Xcode 问题。如果您在 UILabel 或其他一些 UI 元素中显示该值会发生什么?
  • UILabel 中的结果相同。试过 item.dataValue 但没有运气。
  • 也许文本是以 UTF-8(或其他)编码存储的? NSString 以 UTF-16 存储所有内容。
  • 试过:for (int i = 1; i< 35; i++) { NSLog(@"%i %@", i, [[NSString alloc] initWithData:item.dataValue encoding:i]); } 但总是得到 (null) 或 bplist00o3
  • 试试NSUTF16*NSUTF32* 常量(它们有大整数值)

标签: ios utf-8 nsstring nsstringencoding cyrillic


【解决方案1】:

试试这个:

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

我们从 UTF8 的音频中获取元数据,但不知道它转换成什么 NSStringEncoding,所以我使用:

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

看起来像在 ISOLatin 中的 iOS 编码 Cyrillic(UTF8)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多