无法在EXIF中获取俄语字母



示例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];

在代码中使用UTF8硬编码字符串不安全。参见apple关于格式化字符串对象的文章。

我想你可以使用这段代码作为解决方案:

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];

最新更新