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 相关文章推荐
extjs 学习笔记(三) 最基本的grid
Oct 15 Javascript
JavaScript学习笔记(十七)js 优化
Feb 04 Javascript
JS获取Table中td值的方法
Mar 19 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
Aug 21 Javascript
全面了解addEventListener和on的区别
Jul 14 Javascript
jQuery 判断是否包含在数组中Array[]的方法
Aug 03 Javascript
Vue.Js中的$watch()方法总结
Mar 23 Javascript
JS跳转手机站url的若干注意事项
Oct 18 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
Jan 02 jQuery
Jquery的autocomplete插件用法及参数讲解
Mar 12 jQuery
express + jwt + postMan验证实现持久化登录
Jun 05 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
Oct 28 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 Token(令牌)设计
2008/03/15 PHP
PHP print类函数使用总结
2010/06/25 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
laravel 解决paginate查询多个字段报错的问题
2019/10/22 PHP
asp 取文本框名称代码
2008/12/02 Javascript
javascript 表格排序和表头浮动效果(扩展SortTable)
2009/04/07 Javascript
在vs2010中调试javascript代码方法
2011/02/11 Javascript
angularjs实现与服务器交互分享
2014/06/24 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
javascript结合ajax读取txt文件内容
2014/12/05 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
jQuery Validate 无法验证 chosen-select元素的解决方法
2017/05/17 jQuery
利用jsonp与代理服务器方案解决跨域问题
2017/09/14 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
JavaScript原型对象、构造函数和实例对象功能与用法详解
2018/08/04 Javascript
React优化子组件render的使用
2019/05/12 Javascript
vue router 跳转时打开新页面的示例方法
2019/07/28 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
Centos下实现安装Python3.6和Python2共存
2018/08/15 Python
详解python logging日志传输
2020/07/01 Python
如何通过命令行进入python
2020/07/06 Python
Pycharm及python安装详细教程(图解)
2020/07/31 Python
TripAdvisor台湾:全球最大旅游网站
2018/08/26 全球购物
英国门销售网站:Green Tree Doors
2020/01/07 全球购物
在weblogic中发布ejb需涉及到哪些配置文件
2012/01/17 面试题
当x.equals(y)等于true时,x.hashCode()与y.hashCode()可以不相等,这句话对不对
2015/05/02 面试题
会计与审计毕业生自荐信范文
2013/12/30 职场文书
护士自我评价
2014/02/01 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
食品安全汇报材料
2014/08/18 职场文书
《家》读后感:万惜拯救,冷暖自知
2019/09/25 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技