繼續尋找,在CodeProejct.com找到一篇文章《Reading And Writing " /> 国产日韩欧美不卡,а√天堂8资源中文在线,人人视频精品

色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

JScript中使用ADODB.Stream判斷文件編碼的代碼

一開始使用ASCII編碼來讀取文本數據,模擬讀取二進制數據,但是發現如果字符編碼大于127時,只會得到小于128的值,相當于和128取余了,因此ASCII編碼是不行的。

繼續尋找,在CodeProejct.com找到一篇文章《Reading And Writing Binary Files Using JScript》,里面剛好有我需要的內容。

其實說來也簡單,就是把編碼換一下,使用437,這個是IBM擴展過的ASCII編碼,把ASCII編碼的最高位也利用起來,將字符集中的字符從128個擴展到256個,而使用這個字符集讀取的字符數據就相當于原始二進制數據了。

解決了障礙后,就要開始識別文件的編碼了,通過使用ADODB.Stream對象來讀取文件的開始兩個字節,然后根據這兩個字節就可以判斷文件編碼是什么了。

UTF-8文件如果帶BOM的話,那么頭兩個字節就是0xEF、0xBB,再例如Unicode文件的開始兩個字節是0xFF、0xFE,這些就是判斷文件編碼的依據。

需要注意的是,在ADODB.Stream讀取字符時,并不是一一對應的,也就是說,如果二進制數據是0xEF,讀取出來的字符經過charCodeAt之后,并不是0xFE,而是另外的值,這個對應表可以在上面提到的文章里查到。

程序代碼:
復制代碼 代碼如下:
function CheckEncoding(filename) { 
    var stream = new ActiveXObject("ADODB.Stream"); 
    stream.Mode = 3; 
    stream.Type = 2; 
    stream.Open(); 
    stream.Charset = "437"; 
    stream.LoadFromFile(filename); 
    var bom = escape(stream.ReadText(2)); 
    switch(bom) { 
        // 0xEF,0xBB => UTF-8 
        case "%u2229%u2557": 
            encoding = "UTF-8"; 
            break; 
        // 0xFF,0xFE => Unicode 
        case "%A0%u25A0": 
        // 0xFE,0xFF => Unicode big endian 
        case "%u25A0%A0": 
            encoding = "Unicode"; 
            break; 
        // 判斷不出來就使用GBK,這樣可以在大多數情況下正確處理中文 
        default: 
            encoding = "GBK"; 
            break; 
    } 
    stream.Close(); 
    delete stream; 
    stream = null; 
    return encoding; 


這樣,在需要的時候,通過調用CheckEncoding函數就可以獲取文件的編碼了。
希望此文對你有所幫助。

JavaScript技術JScript中使用ADODB.Stream判斷文件編碼的代碼,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 鄄城县| 黄浦区| 莱芜市| 肇庆市| 镇坪县| 从化市| 金溪县| 泸溪县| 朝阳市| 洛隆县| 绥阳县| 峨边| 仁寿县| 竹北市| 苍南县| 临夏县| 南乐县| 阳原县| 准格尔旗| 德格县| 阳高县| 拜城县| 斗六市| 西乌珠穆沁旗| 兖州市| 晋江市| 微山县| 广德县| 循化| 凤台县| 平武县| 堆龙德庆县| 南木林县| 即墨市| 朝阳县| 闽侯县| 开原市| 新津县| 绥德县| 昭苏县| 唐海县|