#include "il2cpp-config.h" #include "icalls/mscorlib/System.Text/Encoding.h" #include #include #include "os/Encoding.h" #include "vm/String.h" #include "utils/StringUtils.h" namespace il2cpp { namespace icalls { namespace mscorlib { namespace System { namespace Text { static const char *encodings[] = { (char*)1, "ascii", "us_ascii", "us", "ansi_x3.4_1968", "ansi_x3.4_1986", "cp367", "csascii", "ibm367", "iso_ir_6", "iso646_us", "iso_646.irv:1991", (char*)2, "utf_7", "csunicode11utf7", "unicode_1_1_utf_7", "unicode_2_0_utf_7", "x_unicode_1_1_utf_7", "x_unicode_2_0_utf_7", (char*)3, "utf_8", "unicode_1_1_utf_8", "unicode_2_0_utf_8", "x_unicode_1_1_utf_8", "x_unicode_2_0_utf_8", (char*)4, "utf_16", "UTF_16LE", "ucs_2", "unicode", "iso_10646_ucs2", (char*)5, "unicodefffe", "utf_16be", (char*)6, "iso_8859_1", (char*)0 }; Il2CppString* Encoding::InternalCodePage(int32_t *resultCodePage) { const int32_t want_name = *resultCodePage; *resultCodePage = -1; const std::string charSet = os::Encoding::GetCharSet(); std::string codepage(charSet); for (size_t i = 0, length = codepage.length(); i < length; ++i) { char& c = codepage[i]; if (isalpha(c)) c = tolower(c); if (c == '-') c = '_'; } // handle some common aliases const char* p = encodings[0]; int code = 0; for (size_t i = 0; p != 0;) { if ((size_t)p < 7) { code = (int)(size_t)p; p = encodings[++i]; continue; } if (codepage == p) { *resultCodePage = code; break; } p = encodings[++i]; } if (codepage.find("utf_8") != std::string::npos) *resultCodePage |= 0x10000000; if (want_name && *resultCodePage == -1) return il2cpp::vm::String::NewWrapper(charSet.c_str()); else return NULL; } } /* namespace Text */ } /* namespace System */ } /* namespace mscorlib */ } /* namespace icalls */ } /* namespace il2cpp */