用C語言檢測文本編碼的方法

轉: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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章