Libexif encoding problem
-
wrote on 6 Oct 2017, 08:22 last edited by samdol 10 Jun 2017, 08:23
Hi,
I am trying to get EXIF info of jpg file using libexif library.
To do that, I need to get ExifData* by
QString filePath("C:/mfile");
ExifData *exifData = exif_data_new_from_file(filePath.toLatin1());
If filePath is in pure english charactors, there is no problem, I could get
exifData correctly. But if filePath contains chinese charactors, this does not
work well, it returns null exifData.
I tried the followings, but none of them worked, they all return null exifData.
exifData = exif_data_new_from_file(filePath.toLatin1().data());
exifData = exif_data_new_from_file(filePath.toLocal8Bit().data());
exifData = exif_data_new_from_file(filePath.toLocal8Bit().constData());
exifData = exif_data_new_from_file(QFile::encodeName(filePath).constData());
exifData = exif_data_new_from_file(filePath.toStdString().c_str());The prototype of the function in use is
ExifData* exif_data_new_from_file(const char *path)Can I have some hint how I can get exifData of file which contains chinese charactors?
-
Hi,
I am trying to get EXIF info of jpg file using libexif library.
To do that, I need to get ExifData* by
QString filePath("C:/mfile");
ExifData *exifData = exif_data_new_from_file(filePath.toLatin1());
If filePath is in pure english charactors, there is no problem, I could get
exifData correctly. But if filePath contains chinese charactors, this does not
work well, it returns null exifData.
I tried the followings, but none of them worked, they all return null exifData.
exifData = exif_data_new_from_file(filePath.toLatin1().data());
exifData = exif_data_new_from_file(filePath.toLocal8Bit().data());
exifData = exif_data_new_from_file(filePath.toLocal8Bit().constData());
exifData = exif_data_new_from_file(QFile::encodeName(filePath).constData());
exifData = exif_data_new_from_file(filePath.toStdString().c_str());The prototype of the function in use is
ExifData* exif_data_new_from_file(const char *path)Can I have some hint how I can get exifData of file which contains chinese charactors?
@samdol First thing to check would be whether LibExif supports anything else than ASCII for paths. But this is not related to Qt.
-
@samdol First thing to check would be whether LibExif supports anything else than ASCII for paths. But this is not related to Qt.
wrote on 7 Oct 2017, 02:56 last edited by@jsulm
When I tried the following code in Linux Qt4.8.x, I could get the right result, exif_data_new_from_file return non-zero ed.QString filename("/home/myhome/学校.jpg"); QByteArray filenameBA = filename.toUtf8(); const char *filename_char = filenameBA.constData(); ed = exif_data_new_from_file(filename_char);
So it seems LibExif itself supports Chinese charactors too. Unfortunatly, Qt5 does not support TextCodec::setCodecForCStrings() method anymore, and my target platform is Windows. As far as I know, unlike Linux, Windows default codec is not UTF-8. How can I fix it?
-
@jsulm
When I tried the following code in Linux Qt4.8.x, I could get the right result, exif_data_new_from_file return non-zero ed.QString filename("/home/myhome/学校.jpg"); QByteArray filenameBA = filename.toUtf8(); const char *filename_char = filenameBA.constData(); ed = exif_data_new_from_file(filename_char);
So it seems LibExif itself supports Chinese charactors too. Unfortunatly, Qt5 does not support TextCodec::setCodecForCStrings() method anymore, and my target platform is Windows. As far as I know, unlike Linux, Windows default codec is not UTF-8. How can I fix it?
@samdol How do you get the file names in your app?
1/4