Asp生成utf-8编码静态页乱码问题的解决方法

使用asp网页生成utf-8编码的静态化网页时,经常会遇到产生乱码的问题。解决方法是要用ADODB.Stream代替FSO读取文件,因为FSO不能生成utf-8编码的页面。

下面是asp生成utf-8编码静态页的函数代码:



<%@ CODEPAGE=65001 %>
<% Response.Charset="UTF-8" %>
<% Response.Buffer=True %>
<%
Filen = "template/test.htm"
Template = ReadFromUTF(Filen,"utf-8") '读取模板,注意编码对应模板文件编码

strtitle = "标题"
strcontent = "内容"
content = Replace(Template, "#title#",strtitle)
content = Replace(content, "#content#",strcontent)

sFilen = "html/test.htm"
Call WriteToUTF(content,sFilen)'生成静态页,其中存放文件夹需要手动建立

If Not Err Then Response.Write "成功,请等待返回"
Response.Write "<META http-equiv='refresh' content='2;url=rehtm.asp'>"

Function ReadFromUTF(TempString,CharSet) 'TempString要读取的模板文件路径; Charset是编码
  Dim str
  Set stm = server.CreateObject("adodb.stream")
  stm.Type = 2 'adTypeBinary=1 adTypeText=2
  stm.Mode = 3 'adModeRead=1 adModeWrite=2 adModeReadWrite=3
  stm.Charset = CharSet
  stm.Open
  stm.loadfromfile Server.MapPath(TempString)
  str = stm.readtext
  stm.Close
  Set stm = Nothing
  ReadFromUTF = str
End Function

Function WriteToUTF(content,sFilen)'将替换后的内容写入HTML文档,content为替换后的字符串,filename为生成的文件名
  Set objStream = Server.CreateObject("ADODB.Stream")
    With objStream
    .Open
    .Charset   = "utf-8"' //编码,这里你可以改成任何编码
    .Position  = objStream.Size
    .WriteText = content' //模版+数据 写入内容
    .SaveToFile server.mappath(sFilen),2' //生成文件路径
    .Close
    End With
  Set objStream = Nothing
End Function
%>



模板页test.htm代码:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>#title#</title>
</head>

<body>
#content#
</body>
</html>


关键点:1、读取模板的时候用了"UTF-8"编码,所以模板文件必须是个UTF-8编码的文件,否则读取出来的是空白内容。
2、FSO不支持UTF-8编码文本的读取和写入(注:FSO可以生成Unicode非UTF-8),得用adodb.stream组件。

[本日志由 cnfgg 于 2009-08-24 04:35 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: 静态化 解决方法 FSO 函数
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.