示例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];
答案 0 :(得分:1)
在代码中使用UTF8硬编码字符串并不安全。 请参阅Apple关于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];