[转]FSO写UTF-8编码文件

    昨天给aw写一个生成天气预报的xml文件的程序,考虑到通用性,于是选择utf-8编码,我也比较偏好这个编码。最先想到用FSO来写这个xml文件,后来却发现生成的xml文件不能正常显示,仅仅是因为编码的原因。用记事本打开生成的xml文件,另存为utf-8编码的xml文件即可正常显示。于是在网上搜索了一下,结果发现很多人说FSO只能写ANSI编码的文件,不能写utf-8格式的文件,并且只能读写文本文件。很多人都选择用ADODB.STREAM对象来替代FSO对象,因为STREAM类有LOADFROMFILE和SAVETOFILE方法.并且有一个至关重要的属性CHARSET,这是FSO没有的。有人给出了样例程序:

' -------------------------------------------------
'
函数名称:ReadTextFile
'
作用:利用AdoDb.Stream对象来读取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格式的文本文件
'
----------------------------------------------------
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


有这个样例程序,很轻松地搞定了生成utf-8编码的xml文件的问题。谁知一上传到服务器,访问这个页面居然显示为空白,所有的代码均没有执行,包括普通的HTML代码都不显示。后来经过一步一步测试,发现是下面这一行的问题:

stm.SaveToFile server.MapPath(FileUrl), 2

更为诡异的是即使把这一行注释掉,这个页面依然不能执行,但是一旦删除这一行,整个页面就恢复正常了,估计是主机的原因……没办法咯,还是得用FSO,反正主机是支持FSO的,我还就不信FSO只能写ANSI编码的文件了!翻了一些电子书和大量网页,终于发现FSO是可以设置编码的:
object .CreateTextFile(filename[, overwrite[, unicode]])

其中unicode参数可以为以下几种:

- 2   ' 以系统默认格式打开文件。 
- 1   ' 以 Unicode 格式打开文件。 
  0   ' 以 ASCII 格式打开文件。

于是问题迎刃而解,上传到主机,测试,一切OK,哇哈哈~

=============== stream遍历每一行 =====================
没处理过这样的编码,不过单独用stream流应该可以的。  

   dim    st   
  
dim    c   
  
dim    strHTML   
  st   
=    Server.CreateObject( " adodb.stream " )   
  st.Type   
=     2    
  st.Open   
  st.Position   
=     0    
  st.loadFromFile   Server.MapPath(
" christ.txt " )   
  c   
=    st.readText   
  st.close   
  c   
=     split (c, chr ( 13 ) & chr ( 10 ))   
  
for     each    strHTML   in   c   
          strHTML   
=     Trim (strHTML)   
          strHTML   
=     replace (strHTML, " ' " , " '' " )   
          ......   
  
next     
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值