Fdream's Blog
专注于WEB前端开发
Powered by Google

FSO写UTF-8编码文件

19 晴天 2006-8
Fdream 发表于 Ajax Web, 已被阅读 22200 次, 评论 10 条
关键词:编码 ASP FSO
[ 阅读字体大小: ]

昨天给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,哇哈哈~

Related articles 您可能对这些文章也感兴趣:

 
Related comments 与该文相关的评论:(我也想说几句)
引用这个评论  28度工作室 于 1/30/2007 10:11:01 PM 发表评论: 

大家可以参照我的试试,想写生什么编都行.

欢迎到本人 网站去座座.

http://www.28oc.com

大家可以参照我的试试,想写生什么编都行. 欢迎到本人 网站去座座. http://www.28oc.com
引用这个评论  28度工作室 于 1/30/2007 10:05:36 PM 发表评论: 

'================================================

'函数名:CreatedTextFile

'作 用:创建文本文件

'参 数:FileName

'================================================

Public Function CreatedTextFile(ByVal FileName, ByVal body)

On Error Resume Next

If InStr(FileName, ":") = 0 Then FileName = Server.MapPath(FileName)

Dim oStream

Set oStream = CreateObject("ADODB.Stream")

oStream.Type = 2 '设置为可读可写

oStream.Mode = 3 '设置内容为文本

oStream.Charset = "UTF-8" '设置编码

oStream.Open

oStream.Position = oStream.Size

oStream.WriteText body

oStream.SaveToFile FileName, 2

oStream.Close

Set oStream = Nothing

If Err.Number <> 0 Then Err.Clear

End Function

'================================================

'函数名:Readfile

'作 用:读取文件内容

'参 数:fromPath ----来源文件路径

'================================================

Public Function Readfile(ByVal fromPath)

On Error Resume Next

Dim strTemp,fso,f

If InStr(fromPath, ":") = 0 Then fromPath = Server.MapPath(fromPath)

Set fso = Server.CreateObject(FSO_ScriptName)

If fso.FileExists(fromPath) Then

Set f = fso.OpenTextFile(fromPath, 1, True)

strTemp = f.ReadAll

f.Close

Set f = Nothing

End If

Set fso = Nothing

Readfile = strTemp

If Err.Number <> 0 Then Err.Clear

End Function

'================================================

'================================================ '函数名:CreatedTextFile '作 用:创建文本文件 '参 数:FileName '================================================ Public Function CreatedTextFile(ByVal FileName, ByVal body) On Error Resume Next If InStr(FileName, ":") = 0 Then FileName = Server.MapPath(FileName) Dim oStream Set oStream = CreateObject("ADODB.Stream") oStream.Type = 2 '设置为可读可写 oStream.Mode = 3 '设置内容为文本 oStream.Charset = "UTF-8" '设置编码 oStream.Open oStream.Position = oStream.Size oStream.WriteText body oStream.SaveToFile FileName, 2 oStream.Close Set oStream = Nothing If Err.Number <> 0 Then Err.Clear End Function '================================================ '函数名:Readfile '作 用:读取文件内容 '参 数:fromPath ----来源文件路径 '================================================ Public Function Readfile(ByVal fromPath) On Error Resume Next Dim strTemp,fso,f If InStr(fromPath, ":") = 0 Then fromPath = Server.MapPath(fromPath) Set fso = Server.CreateObject(FSO_ScriptName) If fso.FileExists(fromPath) Then Set f = fso.OpenTextFile(fromPath, 1, True) strTemp = f.ReadAll f.Close Set f = Nothing End If Set fso = Nothing Readfile = strTemp If Err.Number <> 0 Then Err.Clear End Function '================================================
引用这个评论  幸福的子弹 于 12/23/2006 6:35:17 PM 发表评论: 

写UTF-8文件时我添加的中文注释会出现乱码:

<?

……

stm.WriteText "companyName="" "&request.form("name")&" "" '公司简介"

……

%>

打开文件发现我添加的'公司简介会成乱码,而生成的companyName="南方互联" 却又是正常的。不知道为什么?

写UTF-8文件时我添加的中文注释会出现乱码: <? …… stm.WriteText "companyName="" "&request.form("name")&" "" '公司简介" …… %> 打开文件发现我添加的'公司简介会成乱码,而生成的companyName="南方互联" 却又是正常的。不知道为什么?
引用这个评论  幸福的子弹 于 12/23/2006 3:15:21 PM 发表评论: 

今天从你这里看到这篇文章,解决了我的实际中的问题,谢谢!:)

今天从你这里看到这篇文章,解决了我的实际中的问题,谢谢!:)
引用这个评论  子乌 于 8/22/2006 1:41:29 AM 发表评论: 

小汗一下……我记得fso的reference里面对这个参数就说明了啊……

小汗一下……我记得fso的reference里面对这个参数就说明了啊……
引用这个评论  aw 于 8/21/2006 6:56:52 PM 发表评论: 

haha , 辛苦了辛苦了~~

haha , 辛苦了辛苦了~~
引用这个评论  Fdream 于 8/20/2006 7:02:39 AM 发表评论: 

嗯啦,玩够了^_^

嗯啦,玩够了^_^
引用这个评论  HotHeart 于 8/19/2006 11:18:45 PM 发表评论: 

把那啥圈圈去掉了?[question]

把那啥圈圈去掉了?[question]
引用这个评论  密陀僧 于 8/19/2006 6:45:18 PM 发表评论: 

HOHO!偶一直都用上面的两个函数读写文件

俺懒啊懒[smile]

HOHO!偶一直都用上面的两个函数读写文件 俺懒啊懒[smile]
引用这个评论  HotHeart 于 8/19/2006 3:45:49 PM 发表评论: 

不错,可以用FSO来生成静态页面了^_^

不错,可以用FSO来生成静态页面了^_^
Add a comment 我来说两句: 
禁止表情
禁止UBB
禁止图片
识别链接
识别关键字
表  情
arrow
用户名:   密码:  (匿名可不写) 同时注册?
验证码:   看不清?换个图片  看不清楚?换个图片

 
Copyright © 2005-2008,Fdream All Rights Reserved
Processed in 0.234381 second(s) , unknow queries
Powered by OWord V0.1, Even Not Alpha
(此博客程序为半成品,请勿索取,以免给您的心灵造成创伤^_^)
鄂ICP备05026031号