JNIEXPORT jstring JNICALL Java_org_mozilla_charsetdetector_CharsetDetector_get_1encoding( JNIEnv *env, jclass jclazz, jstring file) { const char * path; jboolean iscopy; path = env->GetStringUTFChars(file, &iscopy); char buf[4096]; char encoding[CHARDET_MAX_ENCODING_NAME]; size_t len; int res = 0; chardet_t det = NULL; FILE* fp = NULL; chardet_create(&det); fp = fopen(path, "rb"); do { len = fread(buf, 1, sizeof(buf), fp); res = chardet_handle_data(det, buf, len); } while (res==CHARDET_RESULT_OK && feof(fp)==0); fclose(fp); chardet_data_end(det); int result = chardet_get_charset(det, encoding, CHARDET_MAX_ENCODING_NAME); chardet_destroy(det); env->ReleaseStringUTFChars(file, path); if (result == CHARDET_RESULT_OK) { return env->NewStringUTF(encoding); } return 0; }
QByteArray detect(const QByteArray& data) { if (!m_det) return QByteArray(); int ret = chardet_handle_data(m_det, data.constData(), data.size()); if (ret != CHARDET_RESULT_OK) return QByteArray(); chardet_data_end(m_det); QByteArray cs(256, ' '); chardet_get_charset(m_det, cs.data(), cs.size()); chardet_reset(m_det); return cs.trimmed(); }
char * GetLocalEncoding(const char* in_str, unsigned int str_len){ chardet_t chardect=NULL; char *out_encode=new char[CHARDET_MAX_ENCODING_NAME]; if(chardet_create(&chardect)==CHARDET_RESULT_OK){ if(chardet_handle_data(chardect, in_str, (unsigned int)str_len) == CHARDET_RESULT_OK){ if(chardet_data_end(chardect) == CHARDET_RESULT_OK){ chardet_get_charset(chardect, out_encode, CHARDET_MAX_ENCODING_NAME); } } } if(chardect){ chardet_destroy(chardect); return out_encode; } else{ return NULL; } }