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

来源:互联网 发布:视频压缩软件 mac 编辑:程序博客网 时间:2024/04/29 10:13

本文因偶在转移网站编码格式时所写,参考了这个写的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))
%>