判斷乙個檔案是文字檔案還是二進位制檔案可以幫助壓縮軟體針對不同檔案選擇對應的演算法,那麼如何判斷乙個檔案是是文字還是二進位制呢?
view plain
copy to clipboard
print?
int isplaintext(const
char *filename)
fclose(fp);
return (plain_text_char_count / file_length > 0.8) ? 1 : 0;
}
但是這個方法有一些缺陷,比如有的檔案裡包含了一些128..255裡的字母,比如希臘語字母,或者這個檔案使用其他語言編碼包括了漢字等多位元組字元甚至使用unicode編碼就無法判斷了。所以下面介紹一種用在zlib上的新方法,,可以判斷ascii,unicode,以及其他一些寬字符集。
這個演算法把乙個位元組的資料放入三個名單:
白名單:
9 (tab), 10 (lf), 13 (cr), 32..255
灰名單:
7 (bel), 8 (bs), 11(vt), 12 (ff), 26 (sub), 27 (esc)
黑名單:
0..6, 14..31
判斷的方法是:
如果乙個檔案包含至少乙個白名單中的位元組而且不包含乙個黑名單中的位元組,那麼它就是文字檔案,否則它是二進位制檔案。
演算法原理很簡單,凡是出現了黑名單中的位元組的檔案幾乎只可能是二進位制檔案,而普通的文字檔案幾乎不可能出現這些位元組,即使是unicode等多位元組編碼也會設定高位的標記字元以實現相容ascii。
**如下:
view plain
copy to clipboard
print?
int isplaintext2(const
char *filename)
fclose(fp);
return (white_list_char_count >= 1) ? 1 : 0;
}
參考資料:<> by cosmin truta updated in 2006-may-28
文字檔案與二進位制檔案
從本質上說所有檔案都是二進位制檔案,文字i o是在二進位制i o基礎上提供的一層抽象,它封裝了字元的編碼和解碼過程。在文字i o中自動進行編碼與解碼。在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有規定格式的,由可理解的的ascii以及其它編碼文字組成的檔...
文字檔案與二進位制檔案
維基百科 二進位制檔案一般指包含ascii及擴充套件ascii字元中編寫的資料或程式指令的檔案。廣義的二進位制檔案即為檔案,由檔案在外部儲存裝置的存放方式為二進位制而得名。狹義的二進位制檔案即指除文字檔案以外的檔案。簡單來說,文字檔案是基於字元編碼的檔案,常見的編碼有ascii編碼,unicode編...
文字檔案與二進位制檔案
什麼是文字檔案,什麼是二進位制檔案?在windows和dos系統中,狹義的文字檔案是指擴充套件名為txt的檔案。實際上,那些沒有格式的,由可理解的ascii以及其他編碼文字組成的檔案都是文字檔案,如c原始檔,html超文字檔案,xml。除此之外的其他檔案都是二進位制檔案,如word檔案doc,影象格...