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