网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Visual Basic
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.由VisualBasic5.0调用Explorer的.
.快速定位上次VisualBasic程序修改.
.VB5三十六计.
.如何访问文本文件(3)----用Micro.
.利用API函数实现隐藏和显示桌面图.
.VisualBasic让表单一开始就显示在.
.锁住数据库中的表.
.一组VB应用技巧.
.Excel、Access、VB的结合应用.
.快速开发多媒体Web.
.去掉窗体的关闭按钮.
.建立无模式窗口.
.VisualBasicCOM基础讲座之简介.
.VB从零开始编外挂(四).
.VB应用程序中用DDE功能开发AutoC.
.VB入门教程之三.
.数据库复本--网络数据库的复制和.
.怎样在VB中控制WORD.
.计算两个日期间的工作日.
.用VB制作Windows风格安装盘.

字符串中文的问题

发表日期:2006-2-27


->字串中文的问题,起於vb的字串是使用UniCode,而我们一般是使用AsciiCode。
这差别在何处呢?UniCode的每个字元长度是2个byte,而Ascii是一个byte,如果说,我将们将VB的字串写入档案,有时会有意想不到的结果。例如:
Text1.Text="这是一个abc"len5=Len(str5)
如果我们的Access资料库有一栏位的长度是10个Byte,所以我们在TextBox中设定MaxLength=10,但是上面的例子得到的len5是7,而不是我们认为的11,因为不管是中文或英文,vb一律以UniCode来存,所以str5的长度是7个"字元",而text1最大的长度限制是10,7没有超过10,故使用者仍可输入,但存档时,11个byte超过10个byte,所以会有错。
可是或许有人发现,使用RS232来传资料时,另一端主机是Ascii编码的机器,在vb中我们若使用String来传,一样可以通啊,其实那是vb在传送与接收data时,会做转换,使我们的程式设计较方便,但如果传的资料是Binary时,就头大啦。例如说,以字串的方式来传送资料,当想传Ascii大於128时,常有些问题,因为ASC(Chr(129))=0,使我们不能用Chr()的指令来放资料。(事实上,您可以使用ChrW(129)来存资料,和使用AscW()来取得值,加个W代表是Word的运算),这时候,就只有使用ByteArray来做了。1.UniCode转成ByteAryDimbyteAry()AsByteDimstr5AsStringDimiAsLongstr5="这abc"
byteAry=str5Fori=LBound(byteAry)ToUBound(byteAry)
Debug.PrintbyteAry(i)'得25144970980990Nexti
Debug.PrintLen(str5),LenB(str5)'得48
所以了,可看出UniCode的特性,程式应改一下,使用Strconv()来转换DimbyteAry()AsByte
Dimstr5AsStringDimiAsLongstr5="这abc"
byteAry=StrConv(str5,vbFromUnicode)
Fori=LBound(byteAry)ToUBound(byteAry)
Debug.PrintbyteAry(i)'得25144979899Nexti
Debug.PrintLenB(StrConv(str5,vbFromUnicode))'得5
2.ByteAry转回UniCode使用Strconv()转换DimbyteAry(10)asByteDimStr5asString
byteAry(0)=25byteAry(1)=144byteAry(2)=97byteAry(3)=98
byteAry(4)=99Str5=StrConv(byteAry,vbUniCode)3.一些有用的函式SubStr()中文化取子字串,相对Mid()
Strlen()中文化字串长度,相对Len()
StrLeft()中文化取左字串,相对Left()
StrRight()中文化取右字串,相对Right()
isChinese()Check某个字是否中文字

PublicFunctionSubStr(ByValtstrAsString,startAsInteger,OptionallengAsVariant)AsString
DimtmpstrAsString
IfIsMissing(leng)Then
tmpstr=StrConv(MidB(StrConv(tstr,vbFromUnicode),start),vbUnicode)
Else
tmpstr=StrConv(MidB(StrConv(tstr,vbFromUnicode),start,leng),vbUnicode)
EndIf
SubStr=tmpstr
EndFunction

PublicFunctionStrlen(ByValtstrAsString)AsInteger
Strlen=LenB(StrConv(tstr,vbFromUnicode))
EndFunction

PublicFunctionStrLeft(ByValstr5AsString,ByVallen5AsLong)AsString
DimtmpstrAsString
tmpstr=StrConv(str5,vbFromUnicode)
tmpstr=LeftB(tmpstr,len5)
StrLeft=StrConv(tmpstr,vbUnicode)
EndFunction

PublicFunctionStrRight(ByValstr5AsString,ByVallen5AsLong)AsString
DimtmpstrAsString
tmpstr=StrConv(str5,vbFromUnicode)
tmpstr=RightB(tmpstr,len5)
StrLeft=StrConv(tmpstr,vbUnicode)
EndFunction

PublicFunctionisChinese(ByValasciivAsInteger)AsBoolean
IfLen(Hex$(asciiv))>2Then
isChinese=True
Else
isChinese=False
EndIf
EndFunction->
->

上一篇:使VB的网格控件具有输入功能 人气:4201
下一篇:字符串中包含双引号 人气:4594
浏览全部Visual Basic的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐