C++ Exiv2:如何使用UTF8文件路径读取照片?

C++ Exiv2:如何使用UTF8文件路径读取照片?,c++,exif,gtkmm,utf,exiv2,C++,Exif,Gtkmm,Utf,Exiv2,我正在使用GTKmm和exiv2读取EXIF元数据表单照片。但是Exiv2函数只接受std::string文件路径。。。当我在非ASCII文件路径上尝试它时,它会破坏程序 有没有办法读取这些数据?如果Exiv2接受Glib::ustrings,那就太好了 我对Windows和Linux的解决方案感兴趣。如果这是在Windows中,那么您可以使用 干杯,好的,我有一个解决办法 您只需要使用函数Glibmm::locale\u from_utf8将utf8字符串转换为stdascii字符串。 以下是

我正在使用GTKmm和exiv2读取EXIF元数据表单照片。但是Exiv2函数只接受std::string文件路径。。。当我在非ASCII文件路径上尝试它时,它会破坏程序

有没有办法读取这些数据?如果Exiv2接受Glib::ustrings,那就太好了


我对Windows和Linux的解决方案感兴趣。

如果这是在Windows中,那么您可以使用

干杯,好的,我有一个解决办法

您只需要使用函数Glibmm::locale\u from_utf8将utf8字符串转换为stdascii字符串。 以下是一个例子:

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;

}

请使用适当的操作系统进行标记。请注意,这并不保证有效。并非所有文件系统都支持短路径名,在NTFS上,它是可选的,即可以关闭。