gchar * tracker_encoding_guess_meegotouch (const gchar *buffer, gsize size) { /* Initialize detector */ MCharsetDetector detector ((const char *)buffer, (int)size); gchar *locale; gchar *encoding = NULL; if (detector.hasError ()) { g_warning ("Charset detector error when creating: %s", detector.errorString ().toUtf8 (). data ()); return NULL; } locale = tracker_locale_get (TRACKER_LOCALE_LANGUAGE); detector.setDeclaredLocale (locale); MCharsetMatch bestMatch = detector.detect (); if (detector.hasError ()) { g_warning ("Charset detector error when detecting: %s", detector.errorString ().toUtf8 (). data ()); g_free (locale); return NULL; } if (bestMatch.confidence () > 30) { encoding = g_strdup (bestMatch.name ().toUtf8 ().data ()); #if 0 QList<MCharsetMatch> mCharsetMatchList = detector.detectAll(); if (detector.hasError ()) { g_warning ("Charset detector error when detecting all: %s", detector.errorString ().toUtf8 (). data ()); } g_debug ("Detecting all charsets..."); for (gint i = 0; i < mCharsetMatchList.size (); ++i) { g_debug (" Charset '%s' with %d%% confidence...", mCharsetMatchList[i].name (). toUtf8 ().data (), mCharsetMatchList[i].confidence ()); } #endif g_debug ("Guessing charset as '%s' with %d%% confidence", encoding, bestMatch.confidence ()); } else { g_debug ("Ignoring charset as '%s' with %d%% (< 30%%) confidence", bestMatch.name ().toUtf8 ().data (), bestMatch.confidence ()); } g_free (locale); return encoding; }
bool MCharsetMatch::operator>(const MCharsetMatch &other) const { if(this->confidence() > other.confidence()) return true; else if (this->confidence() == other.confidence() && !this->language().isEmpty() && other.language().isEmpty()) return true; else return false; }