static int lStrlen (lua_State* L) { int len=0; const char* str = luaL_checklstring(L,1,&len); int enc = luaL_optint(L,2,-1); if (enc<0) enc = guessEncoding(str); }
void test_guess_encoding() { char* buffer = "an ascii text"; gchar* guessedEncoding = guessEncoding(buffer, strlen(buffer)); #ifdef HAVE_CHARDET CU_ASSERT_PTR_NULL(guessedEncoding); #else CU_ASSERT_PTR_NOT_NULL_FATAL(guessedEncoding); FO_ASSERT_STRING_EQUAL(guessedEncoding, "us-ascii"); #endif if (guessedEncoding) { g_free(guessedEncoding); } }
iconv_t guessConverter(const char* buffer, size_t len) { char* const target = "utf-8"; iconv_t iconvCookie = NULL; gchar* encoding = guessEncoding(buffer, len); if (encoding && (strcmp(encoding, target) != 0)) { iconvCookie = iconv_open(target, encoding); g_free(encoding); } return iconvCookie; }
void test_guess_encodingLatin1() { char* buffer = "a latin1 \xdf\x0a"; // ß gchar* guessedEncoding = guessEncoding(buffer, strlen(buffer)); CU_ASSERT_PTR_NOT_NULL_FATAL(guessedEncoding); #ifdef HAVE_CHARDET FO_ASSERT_STRING_EQUAL(guessedEncoding, "windows-1252"); #else FO_ASSERT_STRING_EQUAL(guessedEncoding, "iso-8859-1"); #endif if (guessedEncoding) { g_free(guessedEncoding); } }
void test_guess_encodingUtf8() { char* buffer = "an utf8 ß"; gchar* guessedEncoding = guessEncoding(buffer, strlen(buffer)); CU_ASSERT_PTR_NOT_NULL_FATAL(guessedEncoding); #ifdef HAVE_CHARDET FO_ASSERT_STRING_EQUAL(guessedEncoding, "UTF-8"); #else FO_ASSERT_STRING_EQUAL(guessedEncoding, "utf-8"); #endif if (guessedEncoding) { g_free(guessedEncoding); } }
static int lStrcvt (lua_State* L) { int len=0; const char* str = luaL_checklstring(L,1,&len); int cpFrom = luaL_checkint(L,2); int cpTo = luaL_optint(L,3,-1); if (cpTo<0) { cpTo = cpFrom; cpFrom = guessEncoding(str); } if (cpFrom>=1200&&cpFrom<=1203) len/=2; char* out = strncvt(str, len, cpFrom, cpTo, &len); if (!out) return 0; if (cpTo>=1200&&cpTo<=1203) len*=2; lua_pushlstring(L, out, len); if (abs(str-out)>4) free(out); return 1; }
static lGuessEncoding (lua_State* L) { lua_pushinteger(L, guessEncoding(luaL_checkstring(L,1))); return 1; }