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 相关文章推荐
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
Dec 25 Javascript
jquery 日期控件datepicker属性详细解析
Nov 08 Javascript
JQuery动画animate的stop方法使用详解
May 09 Javascript
node.js中的fs.readdir方法使用说明
Dec 17 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
JS实现电商放大镜效果
Aug 24 Javascript
图片懒加载imgLazyLoading.js使用详解
Sep 15 Javascript
解决bootstrap模态框数据缓存的问题方法
Aug 10 Javascript
js函数柯里化的方法和作用实例分析
Apr 11 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
Jul 20 Javascript
Javascript类型判断相关例题及解析
Aug 26 Javascript
原生js实现无缝轮播图效果
Jan 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的SQL注入过程分析
2012/01/06 PHP
php定时删除文件夹下文件(清理缓存文件)
2013/01/23 PHP
php实例分享之二维数组排序
2014/05/15 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
浅谈php正则表达式中的非贪婪模式匹配的使用
2014/11/25 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
php转换上传word文件为PDF的方法【基于COM组件】
2019/06/10 PHP
基于jQuery的弹出消息插件 DivAlert之旅(一)
2010/04/01 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
js实现图片漂浮效果的方法
2015/03/02 Javascript
简介JavaScript中的setHours()方法的使用
2015/06/11 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
详解vue渲染从后台获取的json数据
2017/07/06 Javascript
浅谈Angular2 ng-content 指令在组件中嵌入内容
2017/08/18 Javascript
javascript将json格式数组下载为excel表格的方法
2017/12/22 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
vue+echarts实现可拖动节点的折线图(支持拖动方向和上下限的设置)
2019/04/12 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
Python中实现switch功能实例解析
2018/01/11 Python
Python对切片命名的实现方法
2018/10/16 Python
python如何爬取网站数据并进行数据可视化
2019/07/08 Python
Python实现点云投影到平面显示
2020/01/18 Python
Python描述符descriptor使用原理解析
2020/03/21 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
Interhome丹麦:在线预订度假屋和公寓
2019/07/18 全球购物
网络书店创业计划书
2014/02/07 职场文书
吃空饷专项治理工作实施方案
2014/03/04 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
防灾减灾标语
2014/10/07 职场文书
入党政审材料范文
2014/12/24 职场文书
学校青年志愿者活动总结
2015/05/06 职场文书
老人与海读书笔记
2015/06/26 职场文书
董事长年会致辞
2015/07/29 职场文书
python控制台打印log输出重复的解决方法
2021/05/14 Python