Important: Please read the Qt Code of Conduct -

Libexif encoding problem

  • 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?

  • Lifetime Qt Champion

    @samdol First thing to check would be whether LibExif supports anything else than ASCII for paths. But this is not related to Qt.

  • @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?

  • Lifetime Qt Champion

    @samdol How do you get the file names in your app?

Log in to reply