网络编程
位置:首页>> 网络编程>> JavaScript>> 在JScript中使用ADODB.Stream判断文件编码

在JScript中使用ADODB.Stream判断文件编码

作者:xujiwei 来源:HotHeart's BLOG 发布时间:2008-06-08 13:03:00 

标签:adobe.stream,编码,jscript

在实现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函数就可以获取文件的编码了。

0
投稿

猜你喜欢

  • 函数名:chk_Email()'返回值:布尔值(True为通过,False为未通过)'参数:email(需要判断的email
  • 通常,当一个页面有太多信息要显示,而一页塞又不下所有信。为了请求速度、美观以及其他的各种理由,分页就会被我们请过来。让我们的用户可以选择是否
  • 近日,朋友写一个关于成绩管理的系统,其中遇到一个小问题。如果按照SQLSERVER的ORDER 排序时,比如遇到两个100分,结果必然是名次
  •     rs.open sql,conn:如果sql是delete,update,insert则会返
  • 网站可用性是任何网站的基本要素,而可用的导航更是网站所必需的要素之一。导航决定了用户如何与网站进行交互。如果没有了可用的导航,那么网站内容就
  • 通常情况下,即使MyISAM表格式非常可靠(SQL语句对表做的所有改变在语句返回之前被写下),如果下列任何事件发生,你依然可以获得损坏的表:
  • 做设计的时候,如何配色是经常让人头痛的问题,尽管很多时候,很多人都说对于色彩的掌握更多的是靠感觉,但是不得不说,感觉也是要有依据的。所以颜色
  • 有两种方法供参考.一种是实实在在的将图片先用ASPJPEG组件做成想要的尺寸,再读取好处是节省服务器带宽,速度快坏处是处理起来较为麻烦,并网
  • 写任何编程代码,不同的开发者都会有不同的见解。但参考一下总是好的,下面是来自 Javascript Toolbox 发布的 14条最佳JS代
  • 根据一些CSS写作经验,如何提高渲染效率及所占用消耗的资源,我们来浅谈一下CSS的渲染效率,书写高效的CSS。1、十六进制的颜色值对位数与大
  • 可以在Mac OS X 10.2.x(“Jaguar”)和以上版本上Mac OS X使用二进制安装软
  • 前一段时间,一个流行的东方系列mv 《bad apple》  带来一股奇怪的风潮: 各种技术狂人纷纷把这段mv在一些匪夷
  •  见以下两个文件:showimage.asp Change the HTTP header
  • 这个是今年年初写的一篇,拿出来温习下。指针让程序结构变得混乱,也让程序执行效率提高,因此在oo的语言中不提倡指针的使用,使得程序结构清晰易读
  • create or replace PROCEDURE proceudre_name AS BEGIN DECLARE sPara VARC
  • 近段时间看了一些论坛上面关于分页的ASP程序依然有许多的关注者,但里面只有代码,没有详细的解释,对于初学者来说,这样总是得不到真正的掌握,此
  • 全选、全不选、反选这几个功能我们经常会用到,如我们可以用在文章列表管理页面,也可以用在音乐播放页面,使用全选我们可以很方便的进行批量操作,如
  • 不知道用ASP写代码的朋友是不是和我有一样的感受,ASP中最头疼的就是调试程序的时候不方便,我想可能很多朋友都会用这样的方法&ldq
  • 1、可以控制左横向滚动还是右横向滚动。2、鼠标悬停上时暂停滚动,移开后恢复滚动。3、间歇时间按需调整,但不要低于容器向左/右移动的时间。JA
  • 使用MySQL的命令终端时,如果输入SQL有误,将有beep声。若要关闭该功能,根据mysql --help,使用mysql --no-be
手机版 网络编程 asp之家 www.aspxhome.com