昨天给aw写一个生成天气预报的xml文件的程序,考虑到通用性,于是选择utf-8编码,我也比较偏好这个编码。最先想到用FSO来写这个xml文件,后来却发现生成的xml文件不能正常显示,仅仅是因为编码的原因。用记事本打开生成的xml文件,另存为utf-8编码的xml文件即可正常显示。于是在网上搜索了一下,结果发现很多人说FSO只能写ANSI编码的文件,不能写utf-8格式的文件,并且只能读写文本文件。很多人都选择用ADODB.STREAM对象来替代FSO对象,因为STREAM类有LOADFROMFILE和SAVETOFILE方法.并且有一个至关重要的属性CHARSET,这是FSO没有的。有人给出了样例程序: '-------------------------------------------------
'------------------------------------------------- '函数名称:ReadTextFile
'函数名称:ReadTextFile '作用:利用AdoDb.Stream对象来读取UTF-8格式的文本文件
'作用:利用AdoDb.Stream对象来读取UTF-8格式的文本文件 '----------------------------------------------------
'---------------------------------------------------- Function ReadFromTextFile (FileUrl,CharSet)
Function ReadFromTextFile (FileUrl,CharSet) dim str
    dim str set stm=server.CreateObject("adodb.stream")
    set stm=server.CreateObject("adodb.stream") stm.Type=2 '以本模式读取
     stm.Type=2 '以本模式读取 stm.mode=3
     stm.mode=3  stm.charset=CharSet
     stm.charset=CharSet stm.open
     stm.open stm.loadfromfile server.MapPath(FileUrl)
     stm.loadfromfile server.MapPath(FileUrl) str=stm.readtext
     str=stm.readtext stm.Close
     stm.Close set stm=nothing
    set stm=nothing ReadFromTextFile=str
     ReadFromTextFile=str End Function
End Function '-------------------------------------------------
'------------------------------------------------- '函数名称:WriteToTextFile
'函数名称:WriteToTextFile '作用:利用AdoDb.Stream对象来写入UTF-8格式的文本文件
'作用:利用AdoDb.Stream对象来写入UTF-8格式的文本文件 '----------------------------------------------------
'---------------------------------------------------- Sub WriteToTextFile (FileUrl,byval Str,CharSet)
Sub WriteToTextFile (FileUrl,byval Str,CharSet)  set stm=server.CreateObject("adodb.stream")
    set stm=server.CreateObject("adodb.stream") stm.Type=2 '以本模式读取
     stm.Type=2 '以本模式读取 stm.mode=3
     stm.mode=3 stm.charset=CharSet
     stm.charset=CharSet stm.open
     stm.open stm.WriteText str
     stm.WriteText str stm.SaveToFile server.MapPath(FileUrl),2
     stm.SaveToFile server.MapPath(FileUrl),2  stm.flush
     stm.flush stm.Close
     stm.Close set stm=nothing
    set stm=nothing End Sub
End Sub
有这个样例程序,很轻松地搞定了生成utf-8编码的xml文件的问题。谁知一上传到服务器,访问这个页面居然显示为空白,所有的代码均没有执行,包括普通的HTML代码都不显示。后来经过一步一步测试,发现是下面这一行的问题: stm.SaveToFile server.MapPath(FileUrl),2
stm.SaveToFile server.MapPath(FileUrl),2
更为诡异的是即使把这一行注释掉,这个页面依然不能执行,但是一旦删除这一行,整个页面就恢复正常了,估计是主机的原因……没办法咯,还是得用FSO,反正主机是支持FSO的,我还就不信FSO只能写ANSI编码的文件了!翻了一些电子书和大量网页,终于发现FSO是可以设置编码的: object.CreateTextFile(filename[, overwrite[, unicode]])
object.CreateTextFile(filename[, overwrite[, unicode]])
其中unicode参数可以为以下几种:
 -2 '以系统默认格式打开文件。
-2 '以系统默认格式打开文件。  -1 '以 Unicode 格式打开文件。
-1 '以 Unicode 格式打开文件。  0 '以 ASCII 格式打开文件。
 0 '以 ASCII 格式打开文件。于是问题迎刃而解,上传到主机,测试,一切OK,哇哈哈~ 
=============== stream遍历每一行 =================
没处理过这样的编码,不过单独用stream流应该可以的。  
 dim    st
  dim    st    dim    c
  dim    c    dim    strHTML
  dim    strHTML    st   =    Server.CreateObject("adodb.stream")
   st   =    Server.CreateObject("adodb.stream")    st.Type   =   2
   st.Type   =   2    st.Open
   st.Open    st.Position   =   0
   st.Position   =   0    st.loadFromFile    Server.MapPath("christ.txt")
   st.loadFromFile    Server.MapPath("christ.txt")    c   =    st.readText
   c   =    st.readText    st.close
   st.close    c   =   split(c,chr(13)&chr(10))
   c   =   split(c,chr(13)&chr(10))    for   each    strHTML    in    c
  for   each    strHTML    in    c    strHTML   =   Trim(strHTML)
           strHTML   =   Trim(strHTML)    strHTML   =   replace(strHTML,"'","''")
           strHTML   =   replace(strHTML,"'","''")    ......
           ......    next
  next    			       
  
 
 
  
