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实现拼音排序的方法
Nov 20 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
Jan 13 Javascript
ECMAScript5(ES5)中bind方法使用小结
May 07 Javascript
超详细的javascript数组方法汇总
Nov 21 Javascript
JavaScript学习笔记之数组求和方法
Mar 23 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
Jun 21 Javascript
JavaScript实现通过select标签跳转网页的方法
Sep 29 Javascript
BootStrap Table 获取同行不同列元素的方法
Dec 19 Javascript
微信小程序 登陆流程详细介绍
Jan 17 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
Aug 20 Javascript
JS实现随机抽取三人
Nov 06 Javascript
vue项目两种方式实现竖向表格的思路分析
Apr 28 Vue.js
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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
thinkphp获取栏目和文章当前位置的方法
2014/10/29 PHP
PHP输出两个数字中间有多少个回文数的方法
2015/03/23 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
jQuery中获取Radio元素值的方法
2013/07/02 Javascript
Node.js与PHP、Python的字符处理性能对比
2014/07/06 Javascript
jQuery插件form-validation-engine正则表达式操作示例
2017/02/09 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
js点击事件的执行过程实例分析【冒泡与捕获】
2020/04/11 Javascript
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
python快速查找算法应用实例
2014/09/26 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
python 的列表遍历删除实现代码
2020/04/12 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python面向对象特殊成员
2017/04/24 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
Python中asyncio模块的深入讲解
2019/06/10 Python
python实现二级登陆菜单及安装过程
2019/06/21 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
pytorch方法测试详解——归一化(BatchNorm2d)
2020/01/15 Python
Windows10+anacond+GPU+pytorch安装详细过程
2020/03/24 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
省优秀教师事迹材料
2014/01/30 职场文书
企业年会主持词
2014/03/27 职场文书
亲属关系公证书
2014/04/08 职场文书
文明班集体申报材料
2014/05/23 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
习近平在党的群众路线教育实践活动总结大会上的讲话
2014/10/21 职场文书
元宵节晚会主持词
2015/07/01 职场文书
MySQL慢查询中的commit慢和binlog中慢事务的区别
2022/06/16 MySQL
windows系统安装配置nginx环境
2022/06/28 Servers