无法在EXIF中获取俄语字母

时间:2011-12-14 12:13:51

标签: objective-c utf-8 character-encoding nsstring 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];

1 个答案:

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