Text文檔編碼識(shí)別方法

在做文檔讀取的時(shí)候,時(shí)常碰到編碼格式不正確的問題,而要怎么樣正確識(shí)別文檔的編碼格式,成了很多程序員的一塊心病,今天我就要試著治好這塊心病,這段代碼的濃縮來自上千萬文檔的數(shù)據(jù)分析所得,可靠率極其高。

應(yīng)朋友要求,需要幫他做一個(gè)文章操作工具,既然想操作,就有文件的讀取和修改,本來花費(fèi)幾個(gè)小時(shí)信心滿滿把程序交給朋友的時(shí)候,朋友突然來了句,很多文章打開出現(xiàn)亂碼的情況,我哩個(gè)去,像是晴天霹靂深深的擊在我的心窩里,我突然想到了文件編碼問題,而這個(gè)問題,我曾經(jīng)無數(shù)次的嘗試,最終都以失敗而告終,每次嘗試,只不過是減少了錯(cuò)誤概率的出現(xiàn),但是還不足以彌補(bǔ)文件編碼格式分析完全的正確,而這次,朋友又提出來編碼問題,我瞬間凌亂了。

如果不把這個(gè)問題解決,給朋友做的工具等于沒有任何作用,我TM前兩天還吃人家一頓大餐,難道還能吐出來嗎?這個(gè)搞不定,面子就丟大了,無奈之下,我詢問了朋友那里有多少文件?得到答復(fù):好幾千萬。瞬間我眼光放亮了,那就海量數(shù)據(jù)分析吧。

海量數(shù)據(jù)分析的時(shí)候,我使用的是一個(gè)笨方法,就是把所有文件頭數(shù)據(jù)讀取出來,比如讀取4個(gè)byte,然后將讀取的文件內(nèi)容的前一百個(gè)字以(Unicode,UnicodeBigEndian,UTF8,ANSI等等)讀取出來,肉眼識(shí)別吧,比如

public class Info{

public int ch0;//第一個(gè)字符

public int ch1;//第二個(gè)字符

public int ch2;//第三個(gè)字符

public int ch3;//第四個(gè)字符

public string UnicodeStr;//前100個(gè)字

public string UnicodeBigEndianStr;//前100個(gè)字

public string UTF8Str;//前100個(gè)字

public string ANSIStr;//前100個(gè)字

}

 

然后使用lambda做排序,個(gè)人建議對(duì)UnicodeStr,UnicodeBigEndianStr,UTF8Str,ANSIStr這些做排序,因?yàn)榭勺R(shí)別的字符編碼有一定的區(qū)間范圍,做排序后,可識(shí)別漢字的一定都堆在一起;

再有就是可以對(duì) ch0,ch1,ch2,ch3,做詳細(xì)分類,看看它們之間都有什么樣的關(guān)系,通過觀察,我也是能發(fā)現(xiàn)什么的;通過歸納和總結(jié),就得出了TEXT編碼的可識(shí)別方法,如下:

 

 

我想了解如何學(xué)習(xí)

姓名:
手機(jī):
留言: