• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    VB6內置的內碼轉換功能

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 15次 | 進入軟件測試論壇討論

    領測軟件測試網 嘿嘿,看到這個題目,想必嚇了一大跳吧,或者是擺出一副不相信的表情?不用著急,請聽我慢慢道來。
    話說這個VB6,很是無恥,居然內置了支持Unicode的功能,也就是說,當你讀入一個字符串時,它根據本地缺省語言的對應關系將之轉換為Unicode,輸出時,再從Unicode轉換為本地編碼。一方面,它當然方便啦,隨便出個什么語言的版本都好方便的,而且在Unicode的系統上,如NT,那它可就如魚得水,Unicode畢竟是軟件發展的方向,像現在中文Win9X使用的GBK內碼,實際上就是向著Unicode走了一大步?墒窃诹硪环矫,這種支持實際上極大地延緩了字符串的處理時間!想想看,如果我們從文件里讀一行并顯示,本來是很簡單的事情,可是在VB6里面,實際上多了一段轉換到Unicode的時間,如果我們用字符串從原文件里讀一行,然后分析,再寫到目的文件里去,實際上就多了兩重的時間(本地到Unicode,unicode到本地)。當然對于這種小事,高手們想必也都有處理的辦法(如用byte數組來代替字符串)
    說了這么一大堆Unicode的壞話,還沒說到正題呢,由于VB6內置對Unicode的支持,而Unicode里面分別和 GBK 以及Big5漢字都有對應關系,所以要實現轉換也只是一件小事,下面我們就有請本次女主角出場。(嘩嘩嘩嘩……掌聲不絕。)
    函數strConv! 這個美眉大家可能在VB5里面也都見過的,她有一些保鏢,可以幫她把字符串在Unicode和本地編碼之間轉換,而在VB6里面呢,strConv又多了一個保鏢!大家請仔細看:
    strConv(string,conversion) `VB5
    StrConv(string,conversion,LCID) `VB6
    string呢,就是預轉換的字符串了(提示一下,也可以使用byte數組)。
    Conversion: 是一個整數,只決定轉換方式,VB里定義了一些常量,如VBFromUnicode、VBUnicode等等,這些不用我解釋大家應該也明白了吧。
    LCID:哈,這可是VB6新加入的參數了,長整數, 可以指定編碼方式, 如&H404,即Big5碼, &H804即GBK碼,合理運用這個參數,就可以寫出一個非常簡單的內碼轉換工具!
    什么?你還不明白,哎,就把源碼給你看看吧。
    Dim iReadNumber As Integer `讀文件號
    Dim iWriteNumber As Integer `寫文件號
    Dim mem() As Byte `byte數組
    Dim strFileName As String `文件名
    Dim lLength As Long `文件長度
    `將文件內容讀入mem byte數組
    iReadNumber = FreeFile
    strFileName = TextFileName.Text
    lLength = FileLen(strFileName)
    ReDim mem(lLength) As Byte
    Open strFileName For Binary As #iReadNumber
    Get #iReadNumber,,mem
    Close #iReadNumber
    `將mem數組轉換為Big5碼所對應的Unicode碼
    mem = StrConv(mem,vbUnicode,&H404)
    `再將Unicode碼轉換為GBK編碼
    mem = StrConv(mem,vbFromUnicode,&H804)
    `寫到源文件里去
    iWriteNumber = FreeFile

    Kill strFileName
    Open strFileName For Binary As #iWriteNumber
    Put #iWriteNumber,,mem
    Close #iWriteNumber
    `結束
    (筆者用的是中文VB6 Professional 版 + Service Pack3)。
    怎么樣,方便吧?短短幾行就把Big5碼轉換到GBK了。
    不過方便是方便了,但是呢,也有它自己的缺陷,老實說,用這種方法來轉換GB\GBK到Big5碼是非常好的,可是把Big5碼轉過來的話,結果居然是繁體的!看起來真的是很不爽,哎,這也沒有辦法,Unicode里面就是這個對應關系;此外呢,這樣轉換畢竟是走了兩步路,所以呢,從理論上來說,比別的轉碼軟件慢了一倍!
    但是這樣轉過來可是有兩大好處的,一,不會有錯誤的碼,這可是國際標準喲,你想什么? 二,不會有缺字,就像現在的很多轉碼軟件都是從Big5轉到GB碼,想想看15000字轉到六七千字,一一映射,沒有缺字才怪! 

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>