在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))
%>

UTF-8编码格式与Unicode编码格式学习

UTF-8是Unicode的一种实现方式,也就是它的字节结构有特殊要求,所以我们说一个汉字的范围是0X4E00到0x9FA5,是指unicode值,至于放在utf-8的编码里去就是由三个字节来组织,所...
  • ztm521
  • ztm521
  • 2015年03月05日 16:49
  • 1366

关于utf-8,utf-7,unicode几种编码的区别

今天上csdn论坛时看到一个关于utf-8,utf-7......几种编码的区别,说法不一,虽然经常使用这几种编码,咋一想,还真有点模糊,于是百度一下,找了一些相关文章,总结如下(仅代表个人观点):u...
  • qw_study
  • qw_study
  • 2006年10月11日 23:20
  • 5123

利用iconv进行GB2312和Unicode的互转

利用iconv函数族进行编码转换 在LINUX上进行编码转换时,既可以利用iconv函数族编程实现,也可以利用iconv命令来实现,只不过后者是针对文件的,即将指定文件从一种编码转换为另一种编码。 ...
  • rankun1
  • rankun1
  • 2016年03月16日 16:38
  • 1256

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
  • 2994

终于理解了unicode、utf-8、gb2312这些编码集之间的关系了

    这两天在写用python写vim脚本的时候遇到了要用这则匹配中文的情况。以前用c#和javascript来做的时候很简单只要用u[/u4e00-/u9fa5]来匹配就行了。可是在python中...
  • fuadam
  • fuadam
  • 2010年04月24日 15:28
  • 1584

设置vim支持中文编码GB2312和Unicode编码UTF8

vim语言设置,烦啊,编码可能一直是操作系统要处理的一个麻烦问题. 我的Linux上有不少的gb2312 的文件.没法子,只有让Vim也支持他啦。 如果你的系统你自己的主目录中有.vi...
  • liuhuahan
  • liuhuahan
  • 2014年10月28日 12:02
  • 1974

C++转换unicode utf-8 gb2312编码

windows开发环境下用VC++6.0 对unicode 、utf-8、 gb2312 三种编码格式之间的转换方法: #include #include #include using nam...
  • guzicheng
  • guzicheng
  • 2012年06月08日 14:44
  • 3298

MFC中 GB2312、UTF-8、unicode 之间转换

//GB2312到UTF-8的转换 static int GB2312ToUtf8(const char* gb2312, char* utf8) { int len = MultiByteTo...
  • xiaopang1122
  • xiaopang1122
  • 2016年10月10日 10:21
  • 1590

Unicode,UTF-8,UTF-16,UTF-32,gb2312,gbk区别

1.ascII码。 0x0*******; 总共127个。 有英文字母和符号。 好吧,问题来了。英文够用了,其他不够用啊。于是用两种方法解决:  a)GB2312 GBK 这一类的编码方...
  • u010276189
  • u010276189
  • 2015年11月21日 15:55
  • 1846

编码格式说明及Unicode与utf-8互转

1、GB2312:又称国标码,规定:对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示,习惯上称第一个字节为“高字节”,第二个字节为“低字节” GB2312中汉字编码范...
  • koxiaozi1988
  • koxiaozi1988
  • 2017年07月10日 14:29
  • 260
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在ASP中自动检测文件的编码格式,支持UTF-8、GB2312、UTF-7、Unicode、Unicode Swap等格式的检测
举报原因:
原因补充:

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