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中的数学函数集合
May 08 Javascript
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
Sep 25 Javascript
javascript学习笔记(二)数组和对象部分
Sep 30 Javascript
js实现时间显示几天前、几小时前或者几分钟前的方法集锦
May 29 Javascript
Javascript基础学习笔记(菜鸟必看篇)
Jul 22 Javascript
jQuery生成假加载动画效果
Dec 01 Javascript
谈谈jQuery之Deferred源码剖析
Dec 19 Javascript
微信小程序开发教程-手势解锁实例
Jan 06 Javascript
vue自定义tap指令及tap事件的实现
Sep 18 Javascript
详解JavaScript实现动态的轮播图效果
Apr 29 Javascript
vue登录以及权限验证相关的实现
Oct 25 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常用Stream函数集介绍
2013/06/24 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
linux中cd命令使用详解
2015/01/08 PHP
简单了解PHP编程中数组的指针的使用
2015/11/30 PHP
PHP生成及获取JSON文件的方法
2016/08/23 PHP
laravel admin实现分类树/模型树的示例代码
2020/06/10 PHP
javascript屏蔽右键代码
2014/05/15 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
JS获取中文拼音首字母并通过拼音首字母快速查找页面内对应中文内容的方法【附demo源码】
2016/08/19 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
JS一个简单的注册页面实例
2017/09/05 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
JavaScript ES6中的简写语法总结与使用技巧
2018/12/30 Javascript
no-vnc和node.js实现web远程桌面的完整步骤
2019/08/11 Javascript
TypeScript 运行时类型检查补充工具
2020/09/28 Javascript
[51:43]OG vs LGD 2018国际邀请赛淘汰赛BO3 第五场 8.26
2018/08/30 DOTA
python字符串连接的N种方式总结
2014/09/17 Python
Sanic框架应用部署方法详解
2018/07/18 Python
Python输出指定字符串的方法
2020/02/06 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
捷克母婴用品购物网站:Feedo.cz
2020/12/28 全球购物
机械工程系毕业生求职信
2013/09/27 职场文书
电气自动化大学生求职信
2013/10/16 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
办公室人员先进事迹
2014/01/27 职场文书
请假条标准格式规范
2014/04/10 职场文书
红色故事汇观后感
2015/06/18 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
python删除csv文件的行列
2021/04/06 Python
最新最全的手机号验证正则表达式
2022/02/24 Javascript