utf-8(8-bit unicode transformation format)是一種針對unicode的可變長度字元編碼,又稱萬國碼,由ken thompson於2023年建立。現在已經標準化為rfc 3629。utf-8用1到6個位元組編碼unicode字元。用在網頁上可以統一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)。
由於我們使用正規表示式匹配二進位制檔案或者其他非格式化檔案時,正規表示式的匹配內容就有可能出問題,當我們再試圖使用這些資訊是,編譯器可能就報錯,不識別這些文字,這時我們就要識別匹配出來的字串是不是utf-8編碼。
簡單介紹一下utf-8編碼格式,
後面的byte數5、6的都不使用了,所以我們就討論前面的byte數為1、2、3、4的四種情況。**說話
def is_utf_8(str):
remain = 0 #剩餘byte數
for x in range(len(str)):
if remain == 0:
if (ord(str[x]) & 0x80) == 0x00:
remain = 0
elif (ord(str[x]) & 0xe0) == 0xc0:
remain = 1
elif (ord(str[x]) & 0xf0) == 0xe0:
remain = 2
elif(ord(str[x]) & 0xf8) == 0xf0:
remain = 3
else:
return false
else:
if not ((ord(str[x]) & 0xc0) == 0x80):
return false
remain = remain - 1
if remain == 0: #最後如果remain不等於零,可能沒有匹配完整
return true
else:
return false
檢測位元組流是否是UTF8編碼
幾天前偶爾看到有人發帖子問 如何自動識別判斷url中的中文引數是gb2312還是utf 8編碼 也拜讀了wcwtitxu使用巨牛的正規表示式檢測utf8編碼的演算法。使用無數或條件的正規表示式用起來卻是效能不高。先聊聊原理 utf8的編碼規則如下表 看起來很複雜,總結起來如下 ascii碼 u 00...
檢測位元組流是否是UTF8編碼
utf8的編碼規則總結起來如下 ascii碼 u 0000 u 007f 不編碼 其餘編碼規則為 第乙個byte二進位制以形式為n個1緊跟個0 n 2 0後面的位數用來儲存真正的字元編碼,n的個數說明了這個多byte位元組組位元組數 包括第乙個byte 接下來會有n個以10開頭的byte,後6個bi...
判斷檔案是否是utf 8
函式名 isutf8file 日期 2011 12 01 功能 判斷檔案是否是utf 8 輸入引數 tchar strfile 返回值 int 2 表示檔案錯誤 1 表示開啟檔案錯誤 1 是utf 8 有bom 2 是utf 8 無bom 0 表示不是utf 8 int isutf8file tch...