2

我正在努力将字符串写入 JPG 的 Exif:用户评论部分,其中包含度数符号 (°)。

但它不断写出一个'?字符代替它的位置。

前任。

NSString *xmlData = [[NSString alloc] initWithUTF8String:"°,\xC2\xB0,\u00b0"];
[EXIFDictionary setObject:xmlData forKey:(NSString*)kCGImagePropertyExifUserComment];

结果是:

?,?,?

这也不起作用:

NSString *xmlData = [[NSString alloc] initWithFormat:@"43, °, \xC2\xB0, \u00b0, 21'45\""];

NSLog 当然显示'°'。但是当我使用 EXIF 查看器实际读取保存在 JPG 中的数据时,它仍然显示为“?”。

更多信息。一旦写入属性,例如。

[metadataAsMutable setObject:EXIFDictionary forKey:(NSString *)kCGImagePropertyExifDictionary];

NSLog 的结果如下所示:

UserComment = "43, \U00b0, \U00b0, \U00b0, 21'45\"";

有没有人在这方面取得成功?

4

1 回答 1

1

这似乎是 ImageIO 框架中的错误或不受支持。

Exif 规范 ( http://www.exif.org/Exif2-2.PDF ) 声明 UserComment 标记以指定编码的 8 字节区域开头,可以是ASCIIJISUnicode未定义

如果我使用 ExifTool(在 OS X 上)设置 UserComment:

exiftool -UserComment="30°" test.jpg

并使用十六进制编辑器检查文件“test.jpg”,我发现 UserComment 标记的以下数据:

55 4e 49 43 4f 44 45 00     // UNICODE id
00 33 00 30 00 b0           // "30°" as (big-endian) UTF-16

另一方面,如果我使用旧问题中的代码Modified EXIF data does not save properly to set the same UserComment,我会发现以下数据:

41 53 43 49 49 00 00 00     // ASCII id
33 30 3F                    // "30?" in ASCII encoding

这意味着 ImageIO/CoreGraphics 仅使用 ASCII 编码来保存 UserComment 标记并将所有非 ASCII 字符转换为问号。

于 2013-05-01T20:04:29.957 回答