Не могу получить русские буквы в EXIF - PullRequest
1 голос
/ 14 декабря 2011

пример 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 Ответ

1 голос
/ 14 декабря 2011

Использование жестко-закодированных строк 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];
...