最近做東西需要知道檔案(txt,html...)究竟是什麼編碼方式,不然讀取檔案內容可能出現亂碼:
經過網上查詢發現兩種總結一下,方便自己也方便別人:
①通過判斷檔案頭,不過檔案頭不是必須的,所以有些檔案是沒有檔案頭的
/*ef bb bf utf-8
fe ff utf-16/ucs-2, little endian
ff fe utf-16/ucs-2, big endian
ff fe 00 00 utf-32/ucs-4, little endian.
00 00 fe ff utf-32/ucs-4, big-endian.
byte hdbuf[3];
file.read(hdbuf, 3); //讀取檔案頭來判斷是哪種型別
file.seektobegin();
if(hdbuf[0] == strtoul(_t("ff"), null, 16) && hdbuf[1] == strtoul(_t("fe"), null,16))
else if (hdbuf[0] == strtoul(_t("fe"), null, 16) && hdbuf[1] == strtoul(_t("ff"), null, 16))
else if(hdbuf[0] == strtoul(_t("ef"), null,16) &&
hdbuf[1] == strtoul(_t("bb"), null, 16)&&
hdbuf[2] == strtoul(_t("bf"), null, 16)) //utf8
else
②判斷文字是否是utf8,在網上看到的,測試未發現問題,有待進一步驗證
inline bool istextutf8(char* str,ulonglong length)
nbytes--;}}
else //多位元組符的非首位元組,應為10******
nbytes--;}}
if( nbytes > 0 ) //違返規則
if( ballascii ) //如果全部都是ascii, 說明不是utf-8
return true;
}
③windows自帶的istextunicode函式,是不靠譜的,如果只是估計那當然沒問題了。 python判斷檔案使用什麼編碼方式編碼的。
說明 utf相容iso8859 1和ascii,gb18030相容gbk,gbk相容gb2312,gb2312相容ascii codes utf 8 utf 16 gb18030 big5 utf 8 bom字首位元組 utf 8 bom b xef xbb xbf 獲取檔案編碼型別 def fil...
判斷網頁的編碼方式 python
在學習python爬取網頁的時候,我們經常會遇到編碼方式的困擾,為了解決這個編碼方式的問題,首先是要獲取網頁的編碼方式,下面就獲取網頁的編碼方式重點說一下三種方法。一,使用urllib模組的getparam方法 import urllib fopen1 urllib.urlopen info pri...
python判斷網頁編碼方式
在解析網頁的過程中往往會遇到網頁亂碼的情況,自己去看網頁源 往往不太準確,這時候就需要用 去判斷網頁源 的編碼方式,一共介紹三種方式 推薦第二種 url 一,使用urllib模組的getparam方法 import urllib 獲取網頁資訊 data urllib.urlopen url info...