vbscript: конвертировать строку юникода в массив байтов - PullRequest
1 голос
/ 09 сентября 2010

У меня есть строка Unicode, переданная в процедуру vbscript (не Visual Basic 6, но vbscript). Я хочу перебрать строку unicode char по char, получить код для каждого символа, обрезать код до байтового диапазона [0..255] и создать массив байтов.

Таким образом, новый массив байтов должен быть в два раза меньше в памяти по сравнению с исходной строкой Unicode. Я собираюсь сохранить этот массив в файл через ADODB.Stream объект далее

Как я могу преобразовать строку юникода в массив байтов с усеченным кодом символа в диапазон байтов?

Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 09 сентября 2010

Во-первых, перевод unicode в ascii будет работать, только если ваша строка содержит только символы ascii.Так как юникод содержит ascii, это просто вопрос удаления каждого второго символа.

Для получения подробной информации посмотрите юникод в Интернете.

РЕДАКТИРОВАТЬ: В юникоде каждый символ ascii обрабатывается с NULL(0) байт.Удалите этот байт, чтобы преобразовать строку в ASCII.

2 голосов
/ 10 сентября 2010

Кажется, нет никакого способа создать массив байтов в VBS (хотя это очень просто в Visual Basic) - все массивы являются массивами вариантов.

Задача состояла в том, чтобы отправить двоичный поток с сервера в скрипт vbs через строковый тип. Я нашел решение, создав XML-документ на сервере с разделом CDATA, который содержит кодированный массив base64 байтов в виде строковых данных.

Клиент (vbs) делает следующее:

set xmlDoc = CreateObject("Microsoft.XmlDom")
xmlDoc.loadXML(dataFromServer)
base64str = xmlDoc.DocumentElement.Text  ' it's base64 coded binary stream
arrayOfBytes = decodeBase64(base64str)

Function decodeBase64(base64)  
  set dm = CreateObject("Microsoft.XMLDOM")
  set el = dm.createElement("tmp")
  el.DataType = "bin.base64"
  el.Text = base64
  decodeBase64 = el.NodeTypedValue
  set dm = Nothing
End Function
1 голос
/ 20 ноября 2017

Эта функция создает массив байтов:

' http://www.motobit.com/tips/detpg_binarytostring/
Function MultiByteToBinary(MultiByte)
  '� 2000 Antonin Foller, http://www.motobit.com
  ' MultiByteToBinary converts multibyte string To real binary data (VT_UI1 | VT_ARRAY)
  ' Using recordset
  Dim RS, LMultiByte, Binary
  Const adLongVarBinary = 205
  Set RS = CreateObject("ADODB.Recordset")
  LMultiByte = LenB(MultiByte)
  If LMultiByte>0 Then
    RS.Fields.Append "mBinary", adLongVarBinary, LMultiByte
    RS.Open
    RS.AddNew
      RS("mBinary").AppendChunk MultiByte & ChrB(0)
    RS.Update
    Binary = RS("mBinary").GetChunk(LMultiByte)
  End If
  MultiByteToBinary = Binary
End Function

Эта функция создает многобайтовую строку.

' http://www.motobit.com/help/regedit/pa26.htm
'Converts unicode string to a multibyte string
Function StringToMB(S)
  Dim I, B
  For I = 1 To Len(S)
    B = B & ChrB(Asc(Mid(S, I, 1)))
  Next
  StringToMB = B
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...