Can't get russian letters in EXIF

喜你入骨 提交于 2019-12-11 04:56:16

问题


example 1 - it works

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

example 2 - doesn't work

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

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

In second case in EXIF write "Russian letters(??????? ?????)" if NSString contains parameter its happens. how can I get correct russian letters use NSString with parameter?

maybe problem is the next saving at dictionary?

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

or

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

回答1:


Using UTF8 hard-coded strings in code isn't safe. See apple's article about Formatting String Objects.

I suppose that you can use that code as workaround:

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

Or if that doesn't work either, so, you can always use plain C to perform formatting:

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


来源:https://stackoverflow.com/questions/8504271/cant-get-russian-letters-in-exif

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!