在ASP中自动检测文件的编码格式,支持UTF-8、GB2312、UTF-7、Unicode、Unicode Swap等格式的检测

原创 2006年06月10日 21:22:00

本文因偶在转移网站编码格式时所写,参考了这个写的http://www.zuoyefeng.com/show.aspx?id=111&cid=21

他的是C#的,偶是ASP的,需要其他DELPHI和VB格式的可以联系我。

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%

'本代码由不速白客原创,转载使用请保留此信息,否则偶要追究责任哦。

'探讨技术请加QQ:115269 也请访问我的主页:http://www.772.cn/

'函数调用格式:直接调用GetFileCharSet(文件路径)即可返回
Option Explicit
Function GetFileCharset(ByVal FilePath)
 If InStr(FilePath,":")=0 Then
  FilePath=Server.MapPath(FilePath)
 End If
 Dim objStream
 Dim LoadBytes
 Set objStream = CreateObject("ADODB.Stream")
 With objStream
 .Type = 1
 .Mode = 3
 .Open
 .LoadFromFile FilePath
 LoadBytes=.Read(3)'仅读取3个字节的BOM信息
 .Close
 End With
 Set objStream = NoThing
 Dim FileCharset, strFileHead
 '从二进制流中分析文件头的编码信息
 strFileHead=BinToHex(LoadBytes)
 '判断文件采用了何种编码 BFBBEF
 If strFileHead = "EFBBBF" Then
  '前3个byte如果为 EF BB BF 则表示为 UTF-8编码
  GetFileCharset = "UTF-8"
 Else
  strFileHead = Left(strFileHead, 4)
  If strFileHead = "FEFF" Then
   '此时为 unicode big endian 编码
   GetFileCharset = "UNICODE BIG"
  ElseIf strFileHead = "FFFE" Then
   '此时为 unicode 编码
   GetFileCharset = "UNICODE"
  Else
   '否则默认为普通简体中文 GB2312
   '你如果知道其它编码的格式还可以继续的分析判断!
   GetFileCharset = "GB2312"
  End If
 End If
End Function

Function BinToHex(vStream)
 Dim reVal,I
 reVal = 0
 For I = 1 To LenB(vStream)
  reVal = reVal * 256 + AscB(MidB(vStream,I,1))
 Next
 BinToHex=Hex(reVal)
End Function


' 这个函数是去掉BOM信息,不建议去掉,否则可能检测不到呢

Function RemoveBOM(ByVal FilePath)
 If InStr(FilePath,":")=0 Then
  FilePath=Server.MapPath(FilePath)
 End If
 Dim objStream
 Set objStream = CreateObject("ADODB.Stream")
 With objStream
  .Type = 1
  .Mode = 3
  .Open
  .LoadFromFile FilePath
  .Position = 3
  .Write = .Read
  .SaveToFile FilePath,2
  .Close
 End With
 Set objStream = Nothing
End Function

Dim FilePath
FilePath=Trim(request.ServerVariables("QUERY_STRING"))
If FilePath="" Then FilePath="robots.txt"
Response.Write(GetFileCharset(FilePath))
%>

相关文章推荐

编码格式简介(ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE)

转发:http://blog.jobbole.com/30526/ 来源:潜行者m 的博客 编码一直是让新手头疼的问题,特别是 GBK、GB2312、UTF-8 这三个比较常见的网页编码的区别...
  • ldanduo
  • ldanduo
  • 2012年11月20日 14:02
  • 72123

编码格式简介(ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE)

原文转自:http://blog.jobbole.com/30526/    感谢原作者! 编码一直是让新手头疼的问题,特别是 GBK、GB2312、UTF-8 这三个比较常见的网页编码的区别,...

(个人理解+转载)ANSI/ASCII/UTF8/UNICODE/GB2312/UCS-2/UTF16-文本的编码格式

参考文档: http://baike.baidu.com/view/443268.htm?fromId=25492 http://www.ruanyifeng.com/blog/2007/10/asc...

文本文件及二进制文件的大小, Unicode/utf-8/ansi编码格式

今天看别人写的程序, 有一点不是很明白, 就是在mfc的程序中利用CFile在写文件时是怎么区别二进制文件和文本文件的. 首先说一下二进制文件和文本文件的区别: 从网上找到一篇文章, 写的挺基础,...

Linux Unicode 编程--C语言如何使用/生成UTF-8编码格式的文件

http://www.ibm.com/developerworks/cn/linux/i18n/unicode/linuni/
  • erazy0
  • erazy0
  • 2011年03月30日 21:40
  • 2691

VBS和ASP中的各种编码转换GB2312、UTF-8、Unicode、URL解码、二进制、十进制代码、十六进制

'UTF转GB---将UTF8编码文字转换为GB编码文字 function UTF2GB(UTFStr) for Dig=1 to len(UTFStr) '如果UTF8编码文字以%开头...
  • wqsys
  • wqsys
  • 2012年07月21日 10:11
  • 2815

UTF-8, Unicode, GB2312格式串转换之C语言版

http://www.cnitblog.com/wujian-IT/archive/2008/03/04/37671.html       (申明:此文章属于原创,若转载请表明作者和原处...

UTF-8, Unicode, GB2312格式串转换之C语言版

int Utf8ToUnicode(void* pOutUnicode, int outBuffLen, char* pInUtf8, int utf8Bytes) {  int curPos = 0...

Android中检测字符编码(GB2312,ASCII,UTF8,UNICODE,TOTAL——ENCODINGS)方法(一)

package com.android.filebrowser;   import java.io.*; import java.net.*;   public class FileEncodi...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ASP中自动检测文件的编码格式,支持UTF-8、GB2312、UTF-7、Unicode、Unicode Swap等格式的检测
举报原因:
原因补充:

(最多只允许输入30个字)