Как преобразовать строку в массив байтов 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;
}
Будет ли эта функция выдавать действительный результат (при условии, что строка находится в юникоде)?
Спасибо!
Ответы
Ответ 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.