当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JScript中使用ADODB.Stream判断文件编码的代码

Javascript
图片放大镜效果代码
超棒的javascript页面顶部卷动广告效果
javascript 改变网页加载的CSS
javascript实现仿银行密码输入框效果的代码
麦鸡的TAB切换功能结合了javascript和css
mapper--图片热点区域高亮组件官方站点
undefined==null引发的两者区别与联系
用cookies实现的可记忆的样式切换效果代码下载
特漂亮的JS图片排列旋转效果代码
js jquery做的图片连续滚动代码
利用js跨页面保存变量做菜单的方法
用javascript做一个webgame连连看大家看下
Javascript 各浏览器的 Javascript 效率对比
北京奥运官方网站幻灯切换效果flash版打包下载
纯js无flash仿搜狐女人频道FLASH图片切换效果代码
javascript实现的三维正方体(兼容ie7,ff)
浅谈javascript函数劫持[转自xfocus]
连续操作HTMLElement对象图文解决方法
Javascript jquery css 写的简单进度条控件
地址栏上的一段语句,改变页面的风格。(教程)

Javascript 中的 JScript中使用ADODB.Stream判断文件编码的代码


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 352 ::
收藏到网摘: n/a

在实现TextStraem的时候,找到判断文件编码的代码是VBS的,但是在JScript中是没有ASC等函数的,也不能对二进制数据进行处理,因此需要通过一个特别的方法来获取文件开关的编码标识。 一开始使用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函数就可以获取文件的编码了。
希望此文对你有所帮助。