轉:http://blog.csdn.net/turingo/article/details/8136644
我們經常會想知道某些文本文件的編碼,可是編碼檢測卻並不是一件簡單的事情,它需要對文本進行採樣,統計分析後再進行字符集的匹配,不過值得慶幸的是有uchardet(https://code.google.com/p/uchardet/)這樣的開源庫可以幫忙這項艱鉅的任務。
uchardet是一個開源的用於文本編碼檢測的C語言庫,其功能模塊是用C++實現的,通過一定數量的字符樣本獨立的分析出文本的編碼,當前已經支持UTF-8/GB13080/BIG5等共30多種編碼。稍感遺憾的是uchardet幾乎沒提供什麼文檔,幸好作者通過學習和研究已經掌握其基本用法,這裏給出一個實例,以免大家走彎路。
#include <stdio.h>
#include <uchardet/uchardet.h>
/* 樣本數量 */
#define NUMBER_OF_SAMPLES (2048)
int main(int argc, char* argv[])
{
FILE* file;
char buf[NUMBER_OF_SAMPLES];
int len;
uchardet_t ud;
/* 打開被檢測文本文件,並讀取一定數量的樣本字符 */
file = fopen("gb18030.txt", "rt");
len = fread(buf, sizeof(char), NUMBER_OF_SAMPLES, file);
fclose(file);
/* 通過樣本字符分析文本編碼 */
ud = uchardet_new();
if(uchardet_handle_data(ud, buf, len) != 0) /* 如果樣本字符不夠,那麼有可能導致分析失敗 */
{
printf("分析編碼失敗!\n");
return -1;
}
uchardet_data_end(ud);
printf("文本的編碼方式是%s。\n", uchardet_get_charset(ud)); /* 獲取並打印文本編碼 */
uchardet_delete(ud);
return 0;
}