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 相关文章推荐
js 巧妙去除数组中的重复项
Jan 25 Javascript
js对象之JS入门之Array对象操作小结
Jan 09 Javascript
jQuery 开发者应该注意的9个错误
May 03 Javascript
node.js中的fs.utimes方法使用说明
Dec 15 Javascript
jQuery实现购物车计算价格功能的方法
Mar 25 Javascript
详解JavaScript中的every()方法
Jun 08 Javascript
基于JavaScript实现轮播图代码
Jul 14 Javascript
vue.js入门教程之绑定class和style样式
Sep 02 Javascript
jQuery编写textarea输入字数限制代码
Mar 23 jQuery
js分页之前端代码实现和请求处理
Aug 04 Javascript
vue判断input输入内容全是空格的方法
Mar 02 Javascript
Promise.all中对于reject的处理方法
Aug 01 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来实现网络服务
2009/09/15 PHP
php session和cookie使用说明
2010/04/07 PHP
PHP curl_setopt()函数实例代码与参数分析
2011/06/02 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
利用Laravel事件系统如何实现登录日志的记录详解
2017/05/20 PHP
详解PHP的抽象类和抽象方法以及接口总结
2019/03/15 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
js中更短的 Array 类型转换
2011/10/30 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
微信小程序  modal详解及实例代码
2016/11/09 Javascript
javascript表单正则应用
2017/02/04 Javascript
vue.js提交按钮时进行简单的if判断表达式详解
2018/08/08 Javascript
angular ng-model 无法获取值的处理方法
2018/10/02 Javascript
vscode 开发Vue项目的方法步骤
2018/11/25 Javascript
简单了解小程序+node梳理登陆流程
2019/06/24 Javascript
Python读写ini文件的方法
2015/05/28 Python
python类和继承用法实例
2015/07/07 Python
python中matplotlib实现最小二乘法拟合的过程详解
2017/07/11 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Python编写单元测试代码实例
2020/09/10 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
美国高级工作服品牌:Carhartt
2018/01/25 全球购物
老板电器官方购物商城:老板油烟机、燃气灶、消毒柜、电烤箱
2018/05/30 全球购物
心理健康心得体会
2014/01/02 职场文书
青年文明号服务承诺
2014/03/31 职场文书
2014年会策划方案
2014/05/11 职场文书
高中班级口号
2014/06/09 职场文书
学生实习证明范文
2014/09/28 职场文书
党员带头倡议书
2015/04/29 职场文书
幼儿园小班开学寄语(2016秋季)
2015/12/03 职场文书
建立共青团委员会的请示
2019/04/02 职场文书
Html5页面播放M4a音频文件
2021/03/30 HTML / CSS
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
关于Python使用turtle库画任意图的问题
2022/04/01 Python
Win11如何启用启动修复 ? Win11执行启动修复的三种方法
2022/04/08 数码科技