JScript中使用ADODB.Stream判断文件编码的代码


Posted in Javascript onJune 09, 2008

一开始使用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 相关文章推荐
JavaScript动态插入script的基本思路及实现函数
Nov 11 Javascript
js导出txt示例代码
Jan 14 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
Nov 26 Javascript
分享一个自己写的简单的javascript分页组件
Feb 15 Javascript
理解javascript中的严格模式
Feb 01 Javascript
微信小程序 富文本转文本实例详解
Oct 24 Javascript
Angularjs修改密码的实例代码
May 26 Javascript
Vue-不允许嵌套式的渲染方法
Sep 13 Javascript
9102年webpack4搭建vue项目的方法步骤
Feb 20 Javascript
webpack4之如何编写loader的方法步骤
Jun 06 Javascript
Vue-cli项目部署到Nginx服务器的方法
Nov 01 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
Mar 03 Javascript
javascript 数组的方法集合
Jun 05 #Javascript
js程序中美元符号$是什么
Jun 05 #Javascript
js字符编码函数区别分析
Jun 05 #Javascript
JavaScript 应用类库代码
Jun 02 #Javascript
javascript数组的扩展实现代码集合
Jun 01 #Javascript
javascript String 的扩展方法集合
Jun 01 #Javascript
用javascript做拖动布局的思路
May 31 #Javascript
You might like
PHP 转义使用详解
2013/07/15 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
纯JS代码实现隔行变色鼠标移入高亮
2016/11/23 Javascript
jQuery元素选择器实例代码
2017/02/06 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
原生JavaScript实现AJAX、JSONP
2017/02/07 Javascript
vue-router+vuex addRoutes实现路由动态加载及菜单动态加载
2017/09/28 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
vue 右键菜单插件 简单、可扩展、样式自定义的右键菜单
2018/11/29 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
js实现坦克大战游戏
2020/02/24 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
python实现rest请求api示例
2014/04/22 Python
python单例模式实例分析
2015/04/08 Python
Python实现单词拼写检查
2015/04/25 Python
python实时分析日志的一个小脚本分享
2017/05/07 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
python实现顺时针打印矩阵
2019/03/02 Python
python三方库之requests的快速上手
2019/03/04 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
Python3读取和写入excel表格数据的示例代码
2020/06/09 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
美国在线乐器和设备商店:Musician’s Friend
2018/07/06 全球购物
一套Delphi的笔试题一
2016/02/14 面试题
个人简历自我评价八例
2013/10/31 职场文书
销售助理岗位职责
2014/02/21 职场文书
售后服务承诺书
2014/03/26 职场文书
公司承诺书怎么写
2014/05/24 职场文书
授权委托书格式范文
2014/08/02 职场文书
软件测试专业推荐信
2014/09/18 职场文书
部队2014年终工作总结
2014/11/27 职场文书
电影复兴之路观后感
2015/06/02 职场文书
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python