作家
登录

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

作者: 来源:www.28hudong.com 2013-03-30 03:03:25 阅读 我要评论

一开始使用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下兼容firefox选取textarea文本的代码

主要用到的js代码复制代码 代码如下:function getSelectedText(){ var selectedText; var textField=document.getElementById('inputTextarea'); if(window.getSelection) selectedText=g>>>详细阅读


本文标题:JScript中使用ADODB.Stream判断文件编码的代码

地址:http://www.17bianji.com/kaifa2/JS/29625.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)