字符串中文的问题_VB.net_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

字符串中文的问题

作者:黑客防线网安VB教程基地 来源:黑客防线网安VB教程基地 浏览次数:0

黑客防线网安网讯:->字串中文的问题,起於vb的字串是使用UniCode,而我们一般是使用AsciiCode。  这差别在何处呢?UniCode的每个字元长度是2个byte,而Ascii是一个byte,如果说,我将们将VB的字串写入档案,...
->字串中文的问题起於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->
->

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-14496-1.html
网站维护教程更新时间:2012-04-03 01:07:31  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer