關於LINUX FILE命令是如何判斷檔案字符集的
今天在使用file -i 檢視MYSQLDUMP檔案的時候其輸出為
charset=us-ascii with very long lines
我匯出的檔案應該是utf8的,為什麼會顯示ASCII呢,我們知道ASCII並沒有中文編碼,那麼真的有問題嗎?
然後用如下2個小程式測試了一下
實際上並沒有什麼不同這兩個檔案 test10 和test11 都有2行其中一個很長的行全部是test字串,第二行是高鵬
明顯他們應該返回UTF8編碼,但是並不是
gaopeng@bogon:~$ file -i test10.txt
test10.txt: text/plain; charset=us-ascii
gaopeng@bogon:~$ file -i test11.txt
test11.txt: text/plain; charset=utf-8
可以看到如果"高鵬"字串在第二行返回為ASCII而在第一行為UTF-8,我們可以推測出 file 命令是檢測檔案開頭的某些字元而返回的,並沒有全部檢視,或者有什麼其他演算法,但是他不是全部檢視。試想如果全部檢視一遍 一個200G的備份檔案瞬間就返回了結果也是不可能的。
在file的幫助中也明確的寫著
Once file has determined the character set used in a text-type file, it will attempt to determine in what language the file is written. The language tests
look for particular strings (cf. ) that can appear anywhere in the first few blocks of a file.
當然要知道具體的方法估計只有原始碼。
所以file -i檢測的並不一定是正確的字符集。
charset=us-ascii with very long lines
我匯出的檔案應該是utf8的,為什麼會顯示ASCII呢,我們知道ASCII並沒有中文編碼,那麼真的有問題嗎?
然後用如下2個小程式測試了一下
點選(此處)摺疊或開啟
-
#include<stdio.h>
-
-
-
int main(void)
-
{
-
FILE *p;
-
int i=0;
-
p=fopen("test11.txt","w+");
-
fputs("高鵬\n",p);
-
while(i<50000000)
-
{
-
fputs("test",p);
-
i++;
-
}
-
-
fputs("\n",p);
-
fclose(p);
- return 0;
- }
點選(此處)摺疊或開啟
-
#include<stdio.h>
-
-
-
int main(void)
-
{
-
FILE *p;
-
int i=0;
-
p=fopen("test10.txt","w+");
-
while(i<50000000)
-
{
-
fputs("test",p);
-
i++;
-
}
-
-
fputs("\n",p);
-
fputs("高鵬\n",p);
- fclose(p);
- return 0;
- }
明顯他們應該返回UTF8編碼,但是並不是
gaopeng@bogon:~$ file -i test10.txt
test10.txt: text/plain; charset=us-ascii
gaopeng@bogon:~$ file -i test11.txt
test11.txt: text/plain; charset=utf-8
可以看到如果"高鵬"字串在第二行返回為ASCII而在第一行為UTF-8,我們可以推測出 file 命令是檢測檔案開頭的某些字元而返回的,並沒有全部檢視,或者有什麼其他演算法,但是他不是全部檢視。試想如果全部檢視一遍 一個200G的備份檔案瞬間就返回了結果也是不可能的。
在file的幫助中也明確的寫著
Once file has determined the character set used in a text-type file, it will attempt to determine in what language the file is written. The language tests
look for particular strings (cf. ) that can appear anywhere in the first few blocks of a file.
當然要知道具體的方法估計只有原始碼。
所以file -i檢測的並不一定是正確的字符集。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29734436/viewspace-2125828/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- php判斷檔案存在是用file_exists還是is_filePHP
- Linux shell命令列檢視判斷檔案是內部內建自帶命令還是外部命令Linux命令列
- 關於js的判斷JS
- js如何判斷指定的檔案是否存在JS
- Linux庫共享檔案的查詢與判斷Linux
- Python判斷物件是否為檔案物件(file object)的三種方法Python物件Object
- JAVA關於判斷年份是閏年還是平年的問題Java
- 如何判斷Unix系統的一個庫檔案是32位還是64位的
- nodejs獲取檔案資訊,判斷是檔案或目錄NodeJS
- 如何判斷沒有字尾的檔案型別?型別
- JDK是如何判斷兩個物件是否相同的?判斷的流程是什麼?JDK物件
- 如何判斷js檔案是否載入完畢JS
- Linux中用st_mode判斷檔案型別Linux型別
- golang判斷檔案是否存在Golang
- vc判斷檔案是否存在
- Vim檔案型別判斷型別
- linux字符集檔案Linux
- [Linux]bc|判斷命令成功執行Linux
- Linux檔案管理相關命令Linux
- jquery如何判斷js檔案是否載入完畢jQueryJS
- java判斷檔案是否存在並建立檔案Java
- C語言關於檔案操作的命令C語言
- Linux如何修改檔案?常用命令是什麼?Linux
- C語言判斷檔案是否存在,判斷檔案可讀可寫可執行C語言
- Linux 中 7 個判斷檔案系統型別的方法Linux型別
- 判斷檔案為文字檔案還是二進位制檔案(C語言實現)C語言
- JS判斷檔案上傳格式JS
- python 判斷檔案是否存在Python
- Node判斷檔案是否連結
- js判斷上傳檔案大小JS
- javascript如何判斷Object是空物件JavaScriptObject物件
- Python判斷一個檔案中的字串是否存在於另外一個檔案中Python字串
- C語言判斷檔案存在和建立檔案C語言
- C# File.Exists 判斷系統檔案,警惕32位和64位的差異C#
- File檔案處理工具(不斷更新)
- Linux - 判斷檔案/目錄是否存在/具有許可權Linux
- 關於檢視檔案的幾個小命令
- 對於MultipartFile使用tika判斷檔案型別,不會產生臨時檔案的方法型別