2016-10-01

VBScript : Convert ASCII to Unicode, Unicode to ASCII

Function AsciiToUnicode(zStr)
        Dim zFrom,zTo,i
        zFrom = zStr
        zTo = ""
        For i = 1 To Len(zStr)
                if ascw(mid(zFrom,i,1)) < 0 then
                        zTo = zTo & "&#" & AscW(mid(zFrom,i,1)) + 65536 & ";"
                ElseIf AscW(mid(zFrom,i,1))>0 and AscW(mid(zFrom,i,1))<127 then
                        zTo = zTo & mid(zFrom,i,1)
                Else
                        zTo = zTo & "&#" & AscW(mid(zFrom,i,1)) & ";"
                End if
        Next
        AsciiToUnicode = zTo
End Function

Function UnicodeToAscii(zStr)
        Dim x,y,z,flag
        flag = 0
        x = InStr(flag + 1,zStr,"&#")
        Do Until x = 0 or x < flag
                x = InStr(flag + 1,zStr,"&#")
                if x <> 0 then
                        y = Mid(zStr,x,8)
                        Select Case InStr(y,";")
                                Case 8
                                        z = ChrW(Mid(y,3,5))
                                Case 7
                                        z = ChrW(Mid(y,3,4))
                                Case 6
                                        z = ChrW(Mid(y,3,3))
                                Case 5
                                        z = ChrW(Mid(y,3,2))
                        End Select
                        if InStr(y,";") > 4 And Asc(z) <> 63 then
                                zStr = Replace(zStr,Left(y,InStr(y,";")),z)
                        End if
                        flag = x
                End if
        Loop
        UnicodeToAscii = zStr
End Function

說明:
  1. Asc : 傳回字串中第一個字母的 ANSI 字元碼 。
  2. AscB 函數是用來處理包含位元組資料的字串, AscB 函數會傳回第一個位元組,而非第一個字元的字元碼。
  3. AscW 函數則是為了使用 Unicode 字元碼的 32 位元作業平台而設計的。此函數會傳回 Unicode 字元碼,而避免將 ANSI 碼轉換為 Unicode 碼處理。
  4. Chr : 傳回指定 ANSI 字元碼所代表的字元。
  5. ChrB 函數是使用於含有位元組資料的 String,而非傳回一個字元,其有可能是一或兩個位元組,而 ChrB 都是傳回一個位元組。
  6. ChrW 函數則是為使用 Unicode 字元碼的 32 位元作業平臺而設計的。ChrW 函數的引數必須是 Unicode 字元碼。


沒有留言:

張貼留言