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