Преобразование двоичного файла к строке Base64

Разумное использование сторонних сценариев jQuery, таких как полевая проверка формы или парсинг URL. Это достойно внимания, что о том, таким образом, Вы будете знать при следующем обнаружении с требованием JavaScript.

6
задан casperOne 19 November 2011 в 02:56
поделиться

5 ответов

Я решил эту проблему, реализовав компонент .net для преобразования в строку base64. Самая сложная часть - это двоичные данные, отправленные в .NET COM из ASP в виде строки. Convert.ToBase64 () принимает только byte []. Поэтому я попытался преобразовать строку в byte [].

Но кодировка, доступная в .net (Unicode, ASCII, UTF), не работает нормально. Происходит потеря данных, пока используются эти кодировки. Наконец, я добился этого, используя объект StringReader. Чтение char по char (16 бит) и преобразование их в (8 бит) массив byte [].

И производительность наилучшая.

С уважением, Шива.

2
ответ дан 17 December 2019 в 18:19
поделиться

следует использовать методы .NET Convert.ToBase64String и Convert.FromBase64String.

Используйте метод Convert.FromBase64String (). Это даст вам двоичный данные обратно (в виде байтового массива).

Чтобы преобразовать двоичные данные в строку Base64, см. функции преобразования двоичных данных в строку в vbscript

из http://www.motobit.com/tips/ detpg_Base64Encode /

Function Base64EncodeBinary(inData)
  Base64EncodeBinary = Base64Encode(BinaryToString(inData))
End Function

Function Base64Encode(inData)
  'rfc1521
  '2001 Antonin Foller, Motobit Software, http://Motobit.cz
  Const Base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  Dim cOut, sOut, I

  'For each group of 3 bytes
  For I = 1 To Len(inData) Step 3
    Dim nGroup, pOut, sGroup

    'Create one long from this 3 bytes.
    nGroup = &H10000 * Asc(Mid(inData, I, 1)) + _
      &H100 * MyASC(Mid(inData, I + 1, 1)) + MyASC(Mid(inData, I + 2, 1))

    'Oct splits the long To 8 groups with 3 bits
    nGroup = Oct(nGroup)

    'Add leading zeros
    nGroup = String(8 - Len(nGroup), "0") & nGroup

    'Convert To base64
    pOut = Mid(Base64, CLng("&o" & Mid(nGroup, 1, 2)) + 1, 1) + _
      Mid(Base64, CLng("&o" & Mid(nGroup, 3, 2)) + 1, 1) + _
      Mid(Base64, CLng("&o" & Mid(nGroup, 5, 2)) + 1, 1) + _
      Mid(Base64, CLng("&o" & Mid(nGroup, 7, 2)) + 1, 1)

    'Add the part To OutPut string
    sOut = sOut + pOut

    'Add a new line For Each 76 chars In dest (76*3/4 = 57)
    'If (I + 2) Mod 57 = 0 Then sOut = sOut + vbCrLf
  Next
  Select Case Len(inData) Mod 3
    Case 1: '8 bit final
      sOut = Left(sOut, Len(sOut) - 2) + "=="
    Case 2: '16 bit final
      sOut = Left(sOut, Len(sOut) - 1) + "="
  End Select
  Base64Encode = sOut
End Function

Function MyASC(OneChar)
  If OneChar = "" Then MyASC = 0 Else MyASC = Asc(OneChar)
End Function
1
ответ дан 17 December 2019 в 18:19
поделиться

Используйте MSXML для кодирования за вас. Вот функция, инкапсулирующая процедуру: -

 Function ToBase64(rabyt)

     Dim xml: Set xml = CreateObject("MSXML2.DOMDocument.3.0")
     xml.LoadXml "<root />"
     xml.documentElement.dataType = "bin.base64"
     xml.documentElement.nodeTypedValue = rabyt

     ToBase64 = xml.documentElement.Text

 End Function

Обратите внимание, что это будет включать в себя разрывы строк в кодировке base64, но большинство декодеров base64 терпимо к разрывам строк. В противном случае вы могли бы просто использовать Replace (base64, vbLF, "") , чтобы удалить их, это все равно будет быстрее, чем решение на чистом VBScript.

Edit Пример использования: -

Dim sBase64: sBase64 = ToBase64(Request.BinaryRead(Request.TotalBytes))
0
ответ дан 17 December 2019 в 18:19
поделиться

I use next code for c#:

    public static string ImageToBase64(Image image, ImageFormat format)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            // Convert Image to byte[]
            image.Save(ms, format);
            byte[] imageBytes = ms.ToArray();

            // Convert byte[] to Base64 String
            string base64String = Convert.ToBase64String(imageBytes);
            return base64String;
        }
    }

    public static Image Base64ToImage(string base64String)
    {
        // Convert Base64 String to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        MemoryStream ms = new MemoryStream(imageBytes, 0,
          imageBytes.Length);

        // Convert byte[] to Image
        ms.Write(imageBytes, 0, imageBytes.Length);
        Image image = Image.FromStream(ms, true);
        return image;
    }

for vbscript see http://www.freevbcode.com/ShowCode.asp?ID=5248 maybe help you.

0
ответ дан 17 December 2019 в 18:19
поделиться

Это хорошо обсуждается в base64-encode-string-in-vbscript .

Кроме того, я нашел этот сайт ] полезно для увеличения скорости работы кода vb. Есть несколько вариантов base 64 для vb6, которые довольно быстрые.

0
ответ дан 17 December 2019 в 18:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: