【问题标题】:Can't get russian letters in EXIFEXIF 中找不到俄语字母
【发布时间】:2011-12-14 12:13:51
【问题描述】:

示例 1 - 有效

NSString *first = @"Russian letters(Русские буквы)";
[exifDictionary setValue:first  forKey:(NSString*)kCGImagePropertyExifUserComment];

示例 2 - 不起作用

NSString *rus = @"Русские буквы";
NSString *first;
first = [[NSString alloc] initWithFormat:@"Russian letters(%@)",rus]; 

[exifDictionary setValue:first  forKey:(NSString*)kCGImagePropertyExifUserComment];

在 EXIF 的第二种情况下,写“俄罗斯字母(???????????????)” 如果 NSString 包含参数它会发生。 如何使用带有参数的 NSString 获得正确的俄语字母?

也许问题是字典的下一次保存?

[exifDictionary setValue:[NSString stringWithFormat:@"Russian letters(%@)",rus]  forKey:(NSString*)kCGImagePropertyExifUserComment];

[exifDictionary setValue:first  forKey:(NSString*)kCGImagePropertyExifUserComment];

【问题讨论】:

  • 你的字符串应该是这样的: NSString *bacon = [NSString stringWithFormat:@"Russian stuff here"];

标签: objective-c utf-8 character-encoding nsstring exif


【解决方案1】:

在代码中使用 UTF8 硬编码字符串并不安全。 查看苹果关于Formatting String Objects的文章。

我想您可以使用该代码作为解决方法:

NSString *rus = @"Русские буквы";
NSString *formatString = [NSString initWithUTF8String:"Russian letters(%@)"];
NSString *first = [[NSString alloc] initWithFormat:formatString, rus];

或者,如果这也不起作用,那么,您总是可以使用纯 C 来执行格式化:

NSString *rus = @"Русские буквы";
char buffer[128];
snprintf(buffer, 128, "Russian letters(%s)", [rus cStringUsingEncoding:NSUTF8Encoding]);
NSString *first = [[NSString alloc] initWithUTF8String:buffer];

【讨论】:

  • NSString *formatString = [NSString initWithUTF8String:"Russian letters(%@)"]; 给出警告,我尝试这样做 NSString *formatString = [[NSString alloc ] initWithUTF8String:"Russian letters(%@)"]; - 但它无论如何都不起作用,结果相同。第二个:snprintf(buffer, 128, "Russian letters(%s)", [rus cStringUsingEncoding:**NSUTF8StringEncoding**]);相同的.. thx 链接,此刻阅读它。
猜你喜欢
  • 2011-01-08
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 2015-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多