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 xml为数据源的下拉框控件
Jul 07 Javascript
动态表格Table类的实现
Aug 26 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
js实现简单的左右两边固定广告效果实例
Apr 10 Javascript
JS中完美兼容各大浏览器的scrolltop方法
Apr 17 Javascript
jquery仿QQ登录账号选择下拉框效果
Mar 22 Javascript
AngularJS入门教程之过滤器详解
Aug 19 Javascript
Angular中封装fancyBox(图片预览)遇到问题小结
Sep 01 Javascript
ES6顶层对象、global对象实例分析
Jun 14 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
Jul 07 Javascript
对layui中的onevent 和event的使用详解
Sep 06 Javascript
layui监听工具栏的实例(操作列表按钮)
Sep 10 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 使用header函数设置HTTP头的示例解析 表头
2013/06/17 PHP
基于php判断客户端类型
2016/10/14 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
2016/12/07 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
javascript实现的listview效果
2007/04/28 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
2014/05/19 Javascript
jQuery中的pushStack实现原理和应用实例
2015/02/03 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
javascript函数式编程程序员的工具集
2015/10/11 Javascript
详解Node.js包的工程目录与NPM包管理器的使用
2016/02/16 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
2016/07/08 Javascript
JavaScript 身份证号有效验证详解及实例代码
2016/10/20 Javascript
详解vue2.0脚手架的webpack 配置文件分析
2017/05/27 Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
2018/07/26 Javascript
vue 使用axios 数据请求第三方插件的使用教程详解
2019/07/05 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
javascript实现鼠标点击生成文字特效
2019/12/24 Javascript
跨平台python异步回调机制实现和使用方法
2013/11/26 Python
Python中的字典与成员运算符初步探究
2015/10/13 Python
Python使用SQLite和Excel操作进行数据分析
2018/01/20 Python
pandas对指定列进行填充的方法
2018/04/11 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
django使用JWT保存用户登录信息
2020/04/22 Python
pytorch SENet实现案例
2020/06/24 Python
整理HTML5移动端开发的常用触摸事件
2016/04/15 HTML / CSS
基于HTML5陀螺仪实现ofo首页眼睛移动效果的示例
2017/07/31 HTML / CSS
基督教卡片、励志礼品、家居装饰等:DaySpring
2018/10/12 全球购物
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
高中历史教学反思
2014/02/08 职场文书
家长寄语大全
2014/04/02 职场文书
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
创业方案:赚钱的烧烤店该怎样做?
2019/07/05 职场文书
汽车销售合同文本
2019/08/08 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
nginx容器方式反向代理实战
2022/04/18 Servers
Win11 BitLocker 驱动器加密
2022/04/19 数码科技