VB中的Unicode和Ansi格式

字號:

VisualBasic32-bit版本的字串處理采用Unicode,也就是說字串在VB內(nèi)部是以Unicode的格式來存放。何謂Unicode?簡單的說,就是每一個字符都是以2-byte的形式表示,而每個「實體字符」就是一個「字符」。因此,
    Len("大家好")
    Len("abc")
    所返回的值都是3,因為「大」和「a」都是一個字符。
    但是這對一些中文字串處理,例如純文字的數(shù)據(jù)文件,卻是一個大災(zāi)難,因為你必須以byte來定位每個字符,可是Unicode卻把一切的處理全搞砸了。例如:
    Len("GoodMorning")返回12,而
    Len("今天天氣很好")返回6
    對初學(xué)者而言,好不容易能使用VB來寫程序已經(jīng)是件了不起的事了,卻馬上在中文處理上挨了一記悶棍,所受到的打擊實在不小。但是不要怕,事實上只要再多了解一些指令,就可以把中文處理的問題解決了。
    是什么指令呢?最重要的莫過于StrConv了。StrConv函數(shù)的語法為:StrConv(待轉(zhuǎn)換字串,轉(zhuǎn)換格式)
    其中轉(zhuǎn)換格式在這里用到的是:
    vbUnicode將Ansi字串轉(zhuǎn)換為Unicode
    vbFromUnicode將Unicode字串轉(zhuǎn)換為Ansi
    將字串轉(zhuǎn)成Ansi之后,所有的字串處理指令都要加個B,例如:LeftB,RightB,
    MidB,ChrB,InstrB,LenB,InputB等。例用這些指令來處理就行了。
    當(dāng)你處理完畢之后,你可以再將它再轉(zhuǎn)回Unicode,這樣就可以使用一般的字串處理指令了。這樣講看得懂嗎?如果還是不了解,看看下面的實例說明:
    簡易使用范例
    看看下面的基本范例您應(yīng)該就會對VB的字串處理方式有些概念。
    PrivateSubCommand1_Click()
    DimsUnicodeAsString
    DimsAnsiAsString
    'Unicode運(yùn)算
    sUnicode="王小明,A123456789,651023,上海市中山路100號,(02)2345678"
    Debug.PrintLen(sUnicode)'返回44
    Debug.PrintMid$(sUnicode,5,10)'返回A123456789
    Debug.PrintInstr(sUnicode,"上海市")'返回23
    '將Unicode字串轉(zhuǎn)成Ansi
    sAnsi=StrConv(sUnicode,vbFromUnicode)
    'Ansi運(yùn)算
    Debug.PrintLenB(sAnsi)'返回54
    Debug.PrintMidB$(sAnsi,8,10)'返回?????,因為忘了轉(zhuǎn)回Unicode
    Debug.PrintStrConv(MidB$(sAnsi,8,10),vbUnicode)'返回A123456789,請注意轉(zhuǎn)回Unicode的動作一定要做
    Debug.PrintInStrB(sAnsi,StrConv("上海市",vbFromUnicode))'返回23,不要忘了要把"上海市"也轉(zhuǎn)成Ansi,否則會找不到
    EndSub
    讀入文本文件
    在VB的小技巧中,有一個是快速讀文件法:
    PrivateSubCommand1_Click()
    DimsFileAsString
    Open"C:\filename.txt"ForInputAs#1
    sFile=Input$(LOF(1),#1)
    Close#1
    EndSub