StrConv Unicode / Ascii for VBScript |
|
allenchan
資深會員 發表:10 回覆:306 積分:283 註冊:2004-01-06 發送簡訊給我 |
原始文章出處:
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 FunctionExample: Data1 = "abc一二三456" BArray = StrConv(Data1, vbFromUnicode) Data2 = StrConv(MidB(BArray, 4, 6), vbUnicode) 從第 4 個位置開始取 6 個 byte,結果為 一二三。 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |