--- ./kipi-plugins/common/exiv2iface/exiv2iface.cpp.orig 2007-02-04 13:32:07.000000000 +0200 +++ ./kipi-plugins/common/exiv2iface/exiv2iface.cpp 2007-02-04 13:56:06.000000000 +0200 @@ -47,6 +47,9 @@ #include #include #include +#include +#include +#include // Exiv2 includes. @@ -75,11 +78,19 @@ Exiv2::ExifData exifMetadata; Exiv2::IptcData iptcMetadata; + + QTextCodec *iptcEncodingCodec; }; Exiv2Iface::Exiv2Iface() { d = new Exiv2IfacePriv; + KConfig *config = KGlobal::config(); + config->setGroup("Metadata Settings"); + QString iptcEncoding = config->readEntry("IPTC Encoding"); + + if (iptcEncoding.isEmpty() || iptcEncoding == "ASCII") d->iptcEncodingCodec = NULL; + else d->iptcEncodingCodec = KGlobal::charsets()->codecForName(KGlobal::charsets()->encodingForName(iptcEncoding)); } Exiv2Iface::~Exiv2Iface() @@ -469,7 +480,9 @@ { std::ostringstream os; os << *it; - QString tagValue = QString::fromLocal8Bit(os.str().c_str()); + QString tagValue; + if (d->iptcEncodingCodec) tagValue = d->iptcEncodingCodec->toUnicode(os.str().c_str()); + else tagValue = QString::fromLocal8Bit(os.str().c_str()); if (escapeCR) tagValue.replace("\n", " "); @@ -492,7 +505,9 @@ { try { - d->iptcMetadata[iptcTagName] = value.ascii(); + if (d->iptcEncodingCodec) + d->iptcMetadata[iptcTagName] = std::string(d->iptcEncodingCodec->fromUnicode(value)); + else d->iptcMetadata[iptcTagName] = value.ascii(); return true; } catch( Exiv2::Error &e )