Подтвердить что ты не робот

Как преобразовать строку в массив байтов base64, было бы это верно?

Я пытаюсь написать функцию, которая преобразует строку в массив байтов base64. Я попытался с таким подходом:

public byte[] stringToBase64ByteArray(String input)
{
    byte[] ret = System.Text.Encoding.Unicode.GetBytes(input);
    string s = Convert.ToBase64String(input);
    ret = System.Text.Encoding.Unicode.GetBytes(s);
    return ret;
}

Будет ли эта функция выдавать действительный результат (при условии, что строка находится в юникоде)? Спасибо!

4b9b3361

Ответ 1

Выглядит хорошо, хотя подход странный. Но используйте Encoding.ASCII.GetBytes() для преобразования строки base64 в байт []. Кодировка Base64 содержит только символы ASCII. Использование Unicode дает вам дополнительный 0 байт для каждого символа.

Ответ 2

Вы можете использовать:

От байта [] до строки:

byte[] array = somebytearray;

string result = Convert.ToBase64String(array);

От строки до байта []:

array = Convert.FromBase64String(result);

Ответ 3

Представление строки как blob, представленной в виде строки, является нечетным... по какой-либо причине вы не можете просто использовать строку напрямую?

Строка всегда юникод; это измененные закодированные байты. Так как base-64 всегда < 128, использование юникода в последней части кажется излишним (если это не то, что требует формат проводов). Лично я использовал бы UTF8 или ASCII для последнего GetBytes, чтобы каждый символ base-64 принимал только один байт.

Ответ 4

Все строки в .NET являются unicode. Этот код даст правильный результат, но потребитель строки BASE64 также должен быть включен в unicode.

Ответ 5

Да, он выведет строку с кодировкой base64 в представлении строки исходного кода UTF-16. Имейте в виду, что AFAIK обычно не используется для использования UTF-16 в base64, ASCII или UTF-8. Однако здесь важно, чтобы отправитель и получатель соглашались с тем, какая кодировка должна использоваться.

Я не понимаю, почему вы переконвертируете строку base64 в массив байтов: base64 используется для предотвращения несовместимости кодирования при передаче, поэтому вы должны хранить в виде строки и выводить ее в формате, требуемом протоколом, который вы используете для передавать данные. И, как сказал Марк, для этой цели определенно излишне использовать UTF-16, поскольку base64 включает только 64 символа, все под 128.