std::string ReaderUtil::GetLocaleEncoding() { #ifdef _WIN32 int codepage = GetACP(); #elif __ANDROID__ // No std::locale support in NDK // Doesn't really matter because the Android version auto-detects via ICU int codepage = 1252; #else int codepage = 1252; std::locale loc = std::locale(""); // Gets the language and culture part only std::string loc_full = loc.name().substr(0, loc.name().find_first_of("@.")); // Gets the language part only std::string loc_lang = loc.name().substr(0, loc.name().find_first_of("_")); if (loc_lang == "th") codepage = 874; else if (loc_lang == "ja") codepage = 932; else if (loc_full == "zh_CN" || loc_full == "zh_SG") codepage = 936; else if (loc_lang == "ko") codepage = 949; else if (loc_full == "zh_TW" || loc_full == "zh_HK") codepage = 950; else if (loc_lang == "cs" || loc_lang == "hu" || loc_lang == "pl" || loc_lang == "ro" || loc_lang == "hr" || loc_lang == "sk" || loc_lang == "sl") codepage = 1250; else if (loc_lang == "ru") codepage = 1251; else if (loc_lang == "ca" || loc_lang == "da" || loc_lang == "de" || loc_lang == "en" || loc_lang == "es" || loc_lang == "fi" || loc_lang == "fr" || loc_lang == "it" || loc_lang == "nl" || loc_lang == "nb" || loc_lang == "pt" || loc_lang == "sv" || loc_lang == "eu") codepage = 1252; else if (loc_lang == "el") codepage = 1253; else if (loc_lang == "tr") codepage = 1254; else if (loc_lang == "he") codepage = 1255; else if (loc_lang == "ar") codepage = 1256; else if (loc_lang == "et" || loc_lang == "lt" || loc_lang == "lv") codepage = 1257; else if (loc_lang == "vi") codepage = 1258; #endif return CodepageToEncoding(codepage); }
std::string ReaderUtil::GetLocaleEncoding() { #ifdef _WIN32 int codepage = GetACP(); #elif defined(__APPLE__) && defined(__MACH__) // libstdc++ does not support locale properly at least on OS X int codepage = 0; #else int codepage = 1252; std::locale loc = std::locale(""); // Gets the language and culture part only std::string loc_full = loc.name().substr(0, loc.name().find_first_of("@.")); // Gets the language part only std::string loc_lang = loc.name().substr(0, loc.name().find_first_of("_")); if (loc_lang == "th") codepage = 874; else if (loc_lang == "ja") codepage = 932; else if (loc_full == "zh_CN" || loc_full == "zh_SG") codepage = 936; else if (loc_lang == "ko") codepage = 949; else if (loc_full == "zh_TW" || loc_full == "zh_HK") codepage = 950; else if (loc_lang == "cs" || loc_lang == "hu" || loc_lang == "pl" || loc_lang == "ro" || loc_lang == "hr" || loc_lang == "sk" || loc_lang == "sl") codepage = 1250; else if (loc_lang == "ru") codepage = 1251; else if (loc_lang == "ca" || loc_lang == "da" || loc_lang == "de" || loc_lang == "en" || loc_lang == "es" || loc_lang == "fi" || loc_lang == "fr" || loc_lang == "it" || loc_lang == "nl" || loc_lang == "nb" || loc_lang == "pt" || loc_lang == "sv" || loc_lang == "eu") codepage = 1252; else if (loc_lang == "el") codepage = 1253; else if (loc_lang == "tr") codepage = 1254; else if (loc_lang == "he") codepage = 1255; else if (loc_lang == "ar") codepage = 1256; else if (loc_lang == "et" || loc_lang == "lt" || loc_lang == "lv") codepage = 1257; else if (loc_lang == "vi") codepage = 1258; #endif return CodepageToEncoding(codepage); }