有没有写类的高手,帮忙给这个类添加一个属性值

aloesky 2014-03-21 11:27:03
之前没学习过类的写法,现在实在项目太急,所以让大家见笑了。

已有类的代码见这里(无毒,放心下载):http://www.openlab.net.cn/forums/attachment?postId=10082328&attachmentId=252886

我的需求是:为这个类增加字符编码属性值:Charset

以便于我在调用这个类的方法时,给该属性赋值为我要求的字符编码(UTF-8,ansi或GB2312等)
...全文
141 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
aloesky 2014-03-22
  • 打赏
  • 举报
回复
没办法,自己开始学习: ASP类 ,asp的class 在ASP(特指使用VBS的ASP,下同)里,使用Class语句来声明一个类。语法如下: Class 类名 End Class 类的定义、变量、属性和方法等都包含在Class...End Class块中。 下面就可以定义类的属性和方法了。 正式讲属性、方法的定义之前,有一点必须了解: 在 Class 块中,成员通过相应的声明语句被声明为 Private 或 Public。 被声明为 Private 的将只在 Class 块内是可见的。 被声明为 Public 不仅在 Class 块的内部是可见的,对Class 块之外的代码也是可见的。 没有使用 Private 或 Public 明确声明的被默认为 Public。 在类的块内部被声明为 Public 的过程 (Sub 或 Function)将成为类的方法,Public变量将成为类的属性。(摘自MS VBS参考) 现在,我们来定义个自行车的类: Class bike End Class 这样,就声明了一个名为bike的类。不过,它现在什么都不能做。要让它能做点什么,得往里面加些东西。 一、私有变量 为了交换数据等操作,我们可以声明一些Class内部的私有变量。顾名思义,私有变量只能在Class块中可见,外部是无法访问的。声明私有变量的语法是: Private 变量名 例:Private bikename '声明了一个名为bikename的私有变量 现在,我们来完善一下bike类: Class bike '***以下四个变量仅在本类内可见**** Private bikename '车名 Private bikemodel '型号 Private bikedate '出厂日期 Private bikespeed '速度 End Class 二、方法: 之所以先讲方法,是因为定义方法对于大家来说相对熟悉。方法可以看作是函数,在VBS里可以使用Sub和Function来定义函数(通常把SUB定义块叫“过程”),所以,定义方法和定义函数(过程)的语法一样--只要加上个Public就可以了--当然,上面已经说了,Class块中默认就是Public,所以可以省略不写: Public Sub 方法名(参数) '方法处理代码 End Sub 或 Public Function 方法名(参数) '方法处理代码 End Function (至于什么时候用Sub什么时候用Function并没规定,不过,一般,要求方法返回一个值就要用到Function,否则就用Sub。) 一个简单的例子: Public Sub speedUp() '加速 bikespeed = bikespeed + 1 End Sub 如此,我们的bike类就有了一个加速的功能,通过它,能使自行车的速度下降1 三、属性 有两种方式来定义属性,一种是在声明变量时使用Public,这样,该变量就成了类的属性; 另一种方法是使用Property语句。下面讲第二种方法。 和变量一样,属性的操作无非是赋值和读取值。 (-)设置属性值(赋值) 设置属性值使用 Property Let语句,语法如下: Public Property Let 属性名(参数) '处理代码 End Property 下面来设置自行车的品牌: Public Property Let Name(ByVal strName) bikename = strName End Property 上例中,我们声明了一个属性:Name。并将类私有变量bikename的值设置为strName,该值从内存中读取(ByVal就是这意思)。 (二)读取属性值 可以使用Property Get 语句来读取属性值,语法如下: Public Property Get 属性名 属性名 = 值 End Property 下面来读取自行车的品牌: Public Property Get Name '获取Name属性值 Name = bikename End Property 本例中,声明了一个属性:Name,并将类私有变量bikename的值赋给该属性。 结合上面的设置属性值,你应该很清楚了吧! 四、综合 到现在,一辆简单的自行车该成形了。综合以上代码: Class bike '***以下四个变量仅在本类内可见**** Private bikename '车名 Private bikemodel '型号 Private bikedate '出厂日期 Private bikespeed '速度 Public Sub speedUp() '定义方法:加速 bikespeed = bikespeed + 1 End Sub Public Property Let Name(ByVal strName) '设置Name属性值 bikename = strName End Property Public Property Get Name '获取Name属性值 Name = bikename End Property End Class 五、事件 VBS里的Class是有事件的。它包含Initialize和Terminate两个事件。 (一)Initialize事件:在类初始化时触发,可以用它来设置属性的初始值,以及显示欢迎 信息等。语法如下: Private Sub Class_Initialize() 语句 End Sub (二)Terminate事件:在类结束时触发,可以用它来处理一些后期事务。语法如下: Private Sub Class_Terminate() 语句 End Sub 六、实例化类 使用Set语句来实例化类。语法如下: Set 实例名 = New 类名 应用到自行车类: Set fhBike = New bike 然后就能用 实例名.属性 来访问、设置属性;使用 实例名.方法 来使用方法了。 例: fhBike.Name = "凤凰" '设置自行车的品牌 fhBike.speedUp() '凤凰自行车加速 使用完之后,别忘了释放该对象: Set fhBike = Nothing 七、完整的例子 <% Class bike '***以下四个变量仅在本类内可见**** Private bikename '车名 Private bikemodel '型号 Private bikedate '出厂日期 Private bikespeed '速度 '***下面的变量为公共的,成了类的一个属性,可通过对象来直接访问**** Public Author '作者 Public Sub Class_Initialize() '类的初始化.通常,可以在这设置一些默认值 Print("欢迎使用,类已成功初始化") bikename = "永久" bikemodel = "女式双轮" bikedate = "1999年5月" bikespeed = 15 Author = "lly365" End Sub Public Sub Class_Terminate() '类结束时触发本事件. bikename = "" bikemodel = "" bikedate = "" bikespeed = 0 Print("感谢使用!现在,类已销毁!") End Sub Public Property Let Speed(ByVal intSpeed) '设置Speed属性值 bikespeed = intSpeed End Property Public Property Get Speed '获取Speed属性值 Speed = bikespeed End Property Public Property Let Name(ByVal strName) '设置Name属性值 bikename = strName End Property Public Property Get Name '获取Name属性值 Name = bikename End Property Public Sub speedUp() '定义方法:加速 bikespeed = bikespeed + 1 End Sub Public Sub speedDown() '定义方法:减速 bikespeed = bikespeed - 1 End Sub Public Sub showInfo() '定义方法:显示信息 Response.Write("<div style=""border:1px solid #0000""><ul>") Response.Write(showInfoItem("品牌",bikename)) Response.Write(showInfoItem("型号",bikemodel)) Response.Write(showInfoItem("生产日期",bikedate)) Response.Write(showInfoItem("速度(km/h)",bikespeed)) Response.Write("</ul></div>") End Sub Private Function showInfoItem(str,item_) '私有函数,仅在本类内部可见! showInfoItem = "<li>" & str & ":" & item_ & "</li>" End Function Sub Print(str) '省略关键字,默认为Public,所以,它也是类的一个方法 Response.Write("<div>" & str & "</div>") End Sub End Class %> '以下是使用类,也就是实例类 <% Dim fhBike Set fhBike = New bike '实例化 fhBike.Print("fhBike已实例化!") '使用Print方法来显示信息 fhBike.showInfo() '显示对象的信息 fhBike.Print("fhBike已加速!") fhBike.speedUp() '加速 fhBike.showInfo() fhBike.Print("设置fhBike相关属性") fhBike.Speed = 20 '设置速度 fhBike.Name = "凤凰" '设置品牌名称 fhBike.showInfo() fhBike.Print("现在,给fhBike减速") fhBike.speedDown() '减速 fhBike.showInfo() fhBike.Print("本类作者: " & fhBike.Author) 'Author被声明为Public,所以可以直接访问(它是一个属性) Set fhBike = Nothing %>
aloesky 2014-03-22
  • 打赏
  • 举报
回复
引用 7 楼 chinmo 的回复:
乱码问题不是你单纯加了一个这么一个改变编码属性就解决的了 就算你设定了编码对了,但文件属性编码跟程序编码却不一致,还是会出现乱码 乱码问题要保证以下几个方面才行: 一、服务端的编码声明,就是类似 <%@ CODEPAGE=936 %>这样的 二、客户端的编码声明,类似<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />这样的 三、文件属性的编码声明,用记事本的话,就另存为时选择编码,如果使用DW的话,就修改文档属性那里修改编码 四、数据库的编码
谢谢指教。 1,2,3,4点我都做过无数次确认了,因为之前我做别的项目时遇到过UTF-8乱码的问题,吃了不少苦头,所以特别注意这点。 确认是没有问题的;我用的是NOTEPAD代码编辑器,DW基本都不用
  • 打赏
  • 举报
回复
乱码问题不是你单纯加了一个这么一个改变编码属性就解决的了 就算你设定了编码对了,但文件属性编码跟程序编码却不一致,还是会出现乱码 乱码问题要保证以下几个方面才行: 一、服务端的编码声明,就是类似 <%@ CODEPAGE=936 %>这样的 二、客户端的编码声明,类似<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />这样的 三、文件属性的编码声明,用记事本的话,就另存为时选择编码,如果使用DW的话,就修改文档属性那里修改编码 四、数据库的编码
aloesky 2014-03-22
  • 打赏
  • 举报
回复
谢谢”宝玉“给出了修改类的方法,测试通过,搞定了:

'宝玉:
'问题可能出在 BinaryToString 函数

'换成这个:
Function BinaryToString(body)
if lenb(body)=0 then
BytesToBstr=""
exit function
end if
dim mystream
set mystream=server.createobject("adodb.stream")
mystream.type=2
mystream.mode=3
mystream.open
mystream.writetext body
mystream.position=0
mystream.charset="UTF-8"
mystream.position=2
bstr=mystream.readtext()
mystream.close
set mystream=nothing
BinaryToString=bstr
End Function 
aloesky 2014-03-22
  • 打赏
  • 举报
回复
引用 5 楼 guda9sex0 的回复:
我搜索到一个可以上传图片的类,楼主如果想试试,可以推荐给你看一下
这个,我也有,对照着改了一下现有的doteyUpload类,解决不了问题
guda9sex0 2014-03-22
  • 打赏
  • 举报
回复
我搜索到一个可以上传图片的类,楼主如果想试试,可以推荐给你看一下
guda9sex0 2014-03-22
  • 打赏
  • 举报
回复
我也为这个类添加了CHARSET的新属性,发现还是乱码。 问题出在表单数据的获取上,是通过UPLOAD.asp实现的,所以问题肯定在这里
guda9sex0 2014-03-22
  • 打赏
  • 举报
回复
楼主大半夜都还没睡在修改这class? 你要是能找到这class的原作者,解决起来应该方便些
guda9sex0 2014-03-22
  • 打赏
  • 举报
回复
引用 6 楼 aloesky 的回复:
引用 5 楼 guda9sex0 的回复:
我搜索到一个可以上传图片的类,楼主如果想试试,可以推荐给你看一下
这个,我也有,对照着改了一下现有的doteyUpload类,解决不了问题
我搜索了一下,ASP无组件上传类里普遍存在UTF-8支持不足的问题。 只有“风声”这个做得最好,速度快,而且有专门支持UTF-8的类 建议楼主去搜索看看,我用的是2.11版,专门支持UTF-8的那个
aloesky 2014-03-21
  • 打赏
  • 举报
回复
自己能想到的是: 文本数据要指定UTF-8编码; type=file的文件也要指定UTF-8编码(防止待上传图片的文件名是中文) 所以,至少在两个地方要设定这个编码的值

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧