我正在使用 GTKmm 和 exiv2 来读取 EXIF 元数据形式的照片。但是 Exiv2 函数只接受 std::string 文件路径...当我在非 ASCII 文件路径上尝试它时,它会破坏程序。
有没有办法读取这些数据?如果 Exiv2 接受 Glib::ustrings 那就太好了...
我对 Windows 和 Linux 的解决方案感兴趣。
如果这是在 Windows 中,那么您可以使用GetShortPathName
.
好的,我有一个解决方案!
您只需使用函数Glibmm::locale_from_utf8将 UTF8 字符串转换为 std(ascii) 字符串。这是一个例子:
void get_exif_data(const Glib::ustring &image_src)
{
Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(Glib::locale_from_utf8(image_src));
image->readMetadata();
Exiv2::ExifData &exifData = image->exifData();
Exiv2::ExifData::const_iterator it = exifData.begin();
for(it;it!=exifData.end();it++) cout << it->key() + ": " + it->getValue() << endl;
}