[fso]如何打开utf-8格式的文件

时间:2023-01-05 15:44:18
想用fso编辑格式为utf-8格式的css文件,可是打开后发现中文注释为乱码.
比如:font-family:濂旇
我的代码:
  1. Set fso = Server.CreateObject("Scripting.FileSystemObject") '建立FSO对象
  2.                 Set fo = fso.OpenTextFile(Cssurl&"style.css",1,true,0)
  3.                 c= fo.ReadAll
  4.                 fo.Close
  5.                 
  6. %>
  7. <form language="javascript" onsubmit="return CheckForm()"  name=WriteForm method="post" action="?action=save">
  8. <textarea id="article"  name="article" cols="80" rows="30"><%=c%></textarea>
复制代码

问:该如何操作才不会出现中文成乱码的问题。css格式一定为utf-8,不可更改。


用adodb.stream来读取可以指定charset,这样读取出来的信息就是正确的。

希望以下代码对他人有用。


  1. Function LoadFile(ByVal File)
  2.     Dim objStream
  3.     On Error Resume Next
  4.     Set objStream = Server.CreateObject("ADODB.Stream")
  5.     With objStream
  6.         .Type = 2
  7.         .Mode = 3
  8.         .Open
  9.         .LoadFromFile Server.MapPath(File)
  10.         If Err.Number<>0 Then
  11.     Response.Write "出错,文件不存在"
  12.     Err.Clear
  13.     Response.End
  14.         End If
  15.         .Charset = "utf-8"
  16.         .Position = 2
  17.         LoadFile = .ReadText
  18.         .Close
  19.     End With
  20.     Set objStream = Nothing
  21. End Function

  22. '存储内容到文件

  23. 'Set fso = Server.CreateObject("Scripting.FileSystemObject") '建立FSO对象
  24. '                Set fo = fso.OpenTextFile(Cssurl&"style.css",1,true,0)
  25. '                c= fo.ReadAll
  26. '                fo.Close
  27.                 
  28. %><form language="javascript" onsubmit="return CheckForm()"  name=WriteForm method="post" action="?action=save">
  29. //'检测是否支持ADODB.Stream,不支持则不显示以下代码。
  30. <textarea id="article"  name="article" cols="80" rows="30"><%=LoadFile("style.css")%></textarea>
复制代码

------------------------------------------------------------------------------

FileSystemObject,ADODB.Stream 能否操作UTF-8格式的文件


Scripting.FileSystemObject 对象创建文件的函数,是下面方式:
FileSystemObject.CreateTextFile(filename[,overwrite[,unicode]])

其中的 unicode 属性是这样:
可选项。Boolean 值指明是否以 Unicode 或 ASCII 文件格式创建文件。如果以 Unicode 文件格式创建文件,则该值为 True;
如果以ASCII 文件格式创建文件,则该值为 False。如果省略此部分,则假定创建 ASCII 文件。

我们是无法用这个函数来创建UTF-8格式文件的。
这时候,我们可以使用 ADODB.Stream 对象,使用方法见下面:
Set objStream = Server.CreateObject("ADODB.Stream")
    With objStream
    .Open
    .Charset = "utf-8"
    .Position = objStream.Size
    .WriteText=str
    .SaveToFile server.mappath("/sitemap.xml"),2
    .Close
    End With
Set objStream = Nothing

--------------------------------------------------------------

Adodb.Stream读取和写入UTF-8编码的文件

<%'函数名称:ReadTextFile
'作用:利用Adodb.Stream对象来读取UTF-8编码的文件
'示例:ReadFromTextFile("File/FileName.htm",UTF-8)
Function ReadFromTextFile(FileUrl,CharSet)
 dim str
 set stm=server.CreateObject("adodb.stream")
 stm.Type=2'以本模式读取
 stm.mode=3 
 stm.charset=CharSet
 stm.open
 stm.loadfromfile server.MapPath(FileUrl)
 str=stm.readtext
 stm.Close
 set stm=nothing
 ReadFromTextFile=str
End Function
'函数名称:WriteToTextFile
'作用:利用Adodb.Stream对象来写入UTF-8编码的文件
'示例:WriteToTextFile("File/FileName.htm",Content,UTF-8)
Sub WriteToTextFile(FileUrl,byval Str,CharSet)
 set stm=server.CreateObject("adodb.stream")
 stm.Type=2'以本模式读取
 stm.mode=3
 stm.charset=CharSet
 stm.open
 stm.WriteText str
 stm.SaveToFile server.MapPath(FileUrl),2 
 stm.flush
 stm.Close
 set stm=nothing
End Sub%>