Merge "Respect system locale in ID3 tag encoding detection"

am: 33bba18b2e

Change-Id: Ibb9d2c7774f9ff8c4900acc5e16fb3a10e699903
gugelfrei
Marco Nelissen 6 years ago committed by android-build-merger
commit deaa7218f7

@ -28,6 +28,8 @@
#include <unicode/ucsdet.h>
#include <unicode/ustring.h>
#include <cutils/properties.h>
namespace android {
CharacterEncodingDetector::CharacterEncodingDetector() {
@ -38,6 +40,26 @@ CharacterEncodingDetector::CharacterEncodingDetector() {
ALOGE("could not create UConverter for UTF-8");
mUtf8Conv = NULL;
}
// Read system locale setting from system property and map to ICU encoding names.
mLocaleEnc = NULL;
char locale_value[PROPERTY_VALUE_MAX] = "";
if (property_get("persist.sys.locale", locale_value, NULL) > 0) {
const size_t len = strnlen(locale_value, sizeof(locale_value));
if (len == 3 && !strncmp(locale_value, "und", 3)) {
// Undetermined
} else if (!strncmp(locale_value, "th", 2)) { // Thai
mLocaleEnc = "windows-874-2000";
}
if (mLocaleEnc != NULL) {
ALOGV("System locale encoding = %s", mLocaleEnc);
} else {
ALOGV("Didn't recognize system locale setting, defaulting to en_US");
}
} else {
ALOGV("Couldn't read system locale setting, assuming en_US");
}
}
CharacterEncodingDetector::~CharacterEncodingDetector() {
@ -157,7 +179,11 @@ void CharacterEncodingDetector::detectAndConvert() {
}
}
if (bestCombinedMatch != NULL) {
if (mLocaleEnc != NULL && !goodmatch && highest < 50) {
combinedenc = mLocaleEnc;
ALOGV("confidence is low but we have recognized predefined encoding, "
"so try this (%s) instead", mLocaleEnc);
} else if (bestCombinedMatch != NULL) {
combinedenc = ucsdet_getName(bestCombinedMatch, &status);
} else {
combinedenc = "ISO-8859-1";

@ -54,6 +54,7 @@ class CharacterEncodingDetector {
StringArray mValues;
UConverter* mUtf8Conv;
const char* mLocaleEnc;
};

Loading…
Cancel
Save