線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:4117
推到 Plurk!
推到 Facebook!

StrConv Unicode / Ascii for VBScript

 
allenchan
資深會員


發表:10
回覆:306
積分:283
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-02 01:02:12 IP:61.62.xxx.xxx 未訂閱
原始文章出處: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=8531&lngWid=4    近日在客戶端撰寫 SQL Server DTS 時,遇到需要將一個文字檔案 update 回一個 Table,此 文字檔案是用固定 byte 數來區分欄位,且文字檔內容中英夾雜,而用 VBScript 讀出來的資 料為 unicode,中英文皆為 2 bytes,如此便無法準確分隔出欄位(必須以中文字 2 bytes, 英文字 1 byte 來計算),但 VBScript 並未提供 StrConv Function,因此無法很簡便的將  unicode 資料轉成 ascii,因此上網找到了一個利用 ADO.Stream 來自行撰寫一個 unicode/ascii 之間互轉的 function,提供給大家參考。    原文中的 code 有些無法通過編譯,我將之稍做修改以符合使用,也提供給大家參考:
Const vbFromUnicode = 128
Const vbUnicode = 64
Const adTypeBinary = 1
Const adTypeText = 2
Const adLongVarBinary = 205
Public Function StrConv(ByRef stringData, ByRef conversion)
    Dim Stream
    Set Stream = CreateObject("ADODB.Stream")        Const UnicodeCharaset = "Big5"
    Const BinaryCharset = "X-ANSI"
    Select Case conversion
    Case vbFromUnicode
        ' Converts a Unicode String To Ascii
        With Stream
            .Charset = UnicodeCharaset
            .Type = adTypeText
            .Open
            .WriteText stringData
            .Position = 0
            .Charset = BinaryCharset
            .Type = adTypeBinary
            StrConv = MidB(.Read, 1)
        End With
        
    Case vbUnicode
        ' Converts an Ascii String To Unicode
        Dim Length
        Dim Buffer
        
        If TypeName(stringData) = "Null" Then
            CStrU = ""
            Exit Function
        End If
        
        stringData = MidB(stringData, 1)
    
        Length = LenB(stringData)
        Dim Rs
        Set Rs = CreateObject("ADODB.Recordset")
        Call Rs.Fields.Append("BinaryData", adLongVarBinary, Length)
        Rs.Open
        Rs.AddNew
        Rs.Fields("BinaryData").AppendChunk (stringData & ChrB(0))
        Rs.Update
        Buffer = Rs.Fields("BinaryData").GetChunk(Length)
        Rs.Close
        Set Rs = Nothing
        With Stream
            .Charset = BinaryCharset
            .Type = adTypeBinary
            .Open
            Call .Write(Buffer)
            .Position = 0
            .Type = adTypeText
            .Charset = UnicodeCharaset
        End With
        
        StrConv = Stream.ReadText(-1)
    End Select
    Stream.Close
    Set Stream = Nothing
End Function
Example: Data1 = "abc一二三456" BArray = StrConv(Data1, vbFromUnicode) Data2 = StrConv(MidB(BArray, 4, 6), vbUnicode) 從第 4 個位置開始取 6 個 byte,結果為 一二三。
系統時間:2024-05-05 0:38:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!