日韩精品中文字幕一区二区-日韩精品中文字幕一区-日韩精品中文字幕视频-日韩精品在线一区二区三区-第一页在线-第一福利视频

東坡下載:內容最豐富最安全的下載站!

首頁編程開發VB/asp → VB中的Unicode和Ansi格式

VB中的Unicode和Ansi格式

相關文章發表評論 來源:本站時間:2010/10/14 14:32:10字體大小:A-A+

更多

作者:東坡下載點擊:2092次評論:0次標簽:

VB中的Unicode 和 Ansi 格式
Visual Basic 32-bit 版本的字串處理采用 Unicode,也就是說字串在 VB 內部是以Unicode
的格式來存放。
何謂 Unicode?簡單的說,就是每一個字符都是以 2-byte 的形式表示,而每個「實體字符」
就是一個「字符」。因此,
Len("大家好")
Len("abc")
所返回的值都是 3,因為「大」和「a」都是一個字符。
但是這對一些中文字串處理,例如純文字的數據文件,卻是一個大災難,因為你必須以byte
來定位每個字符,可是 Unicode 卻把一切的處理全搞砸了。例如:
Len("Good Morning") 返回 12,而
Len("今天天氣很好") 返回 6
對初學者而言,好不容易能使用 VB 來寫程序已經是件了不起的事了,卻馬上在中文處理上
挨了一記悶棍,所受到的打擊實在不小。但是不要怕,事實上只要再多了解一些指令,就可
以把中文處理的問題解決了。
是什么指令呢?最重要的莫過于 StrConv 了。StrConv 函數的語法為:StrConv(待轉換字
串, 轉換格式)
其中轉換格式在這里用到的是:
vbUnicode 將 Ansi 字串轉換為 Unicode
vbFromUnicode 將 Unicode 字串轉換為 Ansi
將字串轉成 Ansi 之后,所有的字串處理指令都要加個 B,例如:LeftB, RightB,
MidB, ChrB, InstrB, LenB, InputB 等。例用這些指令來處理就行了。
當你處理完畢之后,你可以再將它再轉回 Unicode,這樣就可以使用一般的字串處理指令了。
這樣講看得懂嗎?如果還是不了解,看看下面的實例說明:
簡易使用范例
看看下面的基本范例您應該就會對 VB 的字串處理方式有些概念。
Private Sub Command1_Click ()
Dim sUnicode As String
Dim sAnsi As String
' Unicode 運算
sUnicode = "王小明,A123456789,651023,上海市中山路100號,(02)2345678"
Debug.Print Len(sUnicode) ' 返回 44
Debug.Print Mid$(sUnicode, 5, 10) ' 返回 A123456789
Debug.Print Instr(sUnicode, "上海市") ' 返回 23
' 將 Unicode 字串轉成 Ansi
sAnsi = StrConv(sUnicode, vbFromUnicode)
' Ansi 運算
Debug.Print LenB(sAnsi) ' 返回 54
Debug.Print MidB$(sAnsi, 8, 10) ' 返回 ?????,因為忘了轉回 Unicode
Debug.Print StrConv(MidB$(sAnsi, 8, 10), vbUnicode) ' 返回 A123456789,請注意轉
回 Unicode 的動作一定要做
Debug.Print InStrB(sAnsi, StrConv("上海市", vbFromUnicode)) ' 返回 23, 不要忘了
要把"上海市"也轉成 Ansi,否則會找不到
End Sub
讀入文本文件
在 VB 的小技巧中,有一個是快速讀文件法:
Private Sub Command1_Click ()
Dim sFile As String
Open "C:\filename.txt" For Input As #1
sFile = Input$(LOF(1), #1)
Close #1
End Sub
但是很不幸地,如果你讀取的文件內含中文字,那上面這段程序會出現 Input pastend of
file 的錯誤。因為 LOF 返回的是文件的 byte 數,而 Input 函數讀取的是字符數,由于
文件內含中文,因此文件中的字符數將會小于 byte 數,于是就發生錯誤了。
要解決這個問題,我們就要用到 StrConv 和 InputB 這兩個函數了:
Private Sub Command1_Click ()
Dim sFile As String
Open "C:\filename.txt" For Input As #1
sFile = StrConv(InputB$(LOF(1), #1), vbUnicode)
Close #1
End Sub
上面修正程序先用 InputB 將文件讀進來,不過使用 InputB 所讀入的文件是 Ansi格式的,
所以要再用 StrConv 轉成 Unicode 才行。
隨機數據文件
許多文字數據文件是以固定字節的位置來加以區格,例如下面的數據格式:
王小民650110上海市中山路100號 (02)1234567
張大呆660824花蓮縣大甲鎮廣東街23號(03)9876543......
像這種類型的文件要如何處理呢?這是就必須用到 Type 以及 byte array 了。
Private Type tagRecord
Username(5) As Byte ' 姓名 6 bytes
Birthday(5) As Byte ' 生日 6 bytes
Address(21) As Byte ' 地址 22 bytes
TEL(11) As Byte ' 電話 12 bytes
CrLf(1) As Byte ' 換行字符 2 bytes
End Type
Private Sub Command1_Click()
Dim uRecord As tagRecord
Open "C:\filename.dat" For Random As #1 Len = LenB(uRecord)
Get #1, 2, uRecord ' 取第二筆數據
With uRecord ' With ... End With 應該會用吧
Debug.Print .Username ' 返回 ???
Debug.Print StrConv(.Username, vbUnicode) ' 返回 "張大呆"
End With
Close #1
End Sub
在這個例子中,一定要用到 byte array,因為只有 byte array 才能正確地定位到每個 byte
的位置。以前使用字串來定位的方法已經不適用了,千萬要記住!但是使用byte array 所
讀入的數據是 Ansi 格式,若要處理或是做運算的話,記得還要轉成Unicode 格式才行。
[●] 使用 Byte Array
除了上面必須使用 byte 精確定位的例子之外,純文字的處理基本上是用不到 bytearray
的。byte array 通常是用在處理 binary 數據。這方面的問題我們將另文討論。
看吧!只要熟悉使用 StrConv,你就可以在 Unicode 及 Ansi 格式之間自由自在地變來變
去,相信當您看完這篇文章之后,對處理中文應該不再煩惱了吧!

相關評論

閱讀本文后您有什么感想? 已有 人給出評價!

  • 2791 喜歡喜歡
  • 2101 頂
  • 800 難過難過
  • 1219 囧
  • 4049 圍觀圍觀
  • 5602 無聊無聊
熱門評論
最新評論
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字數: 0/500 (您的評論需要經過審核才能顯示)

本類常用軟件

主站蜘蛛池模板: av午夜| 电影暖| 乔治克鲁尼电影作品| 新白娘子传奇剧情| 神犬奇兵 电视剧| 毕福剑说的那句话| overwatch| 课堂精练| 梁山伯与祝英台董洁| 荒野求生电影完整版| 赖小子| 五年级小数除法竖式计算题100道| 金枝玉叶电视剧免费观看| 金珠韩国电影| 1988田螺姑娘| 无内裤全透明走秀视频| 李柯以写真照片| 《我的美女老板》电视剧| 神迹电影| 女脱衣| 贝瓦儿歌第一季| 王维德| 人蛇大战 电影| 公务员体检甲状腺一共查几项| 邵雨薇为艺术做出贡献的电影有哪些| 手机演员表| 男孩之爱 电影| 母猫叫声播放mp3| 绯色恋| 开心麻花电影| 好看的港剧| 文琪演过的电视剧有哪些| 二年级拍手歌生字组词| 柚子猫卡夫卡的心理暗示在线观看| 那些女人演员表全部名单| 蜗居电视剧完整版免费观看高清| 在线观看韩国电影| 《无人生还》电影在线观看| 代高政最新短剧| 小小春| 燕子门|