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

Преобразовать объект .net String в кодировку base64

У меня вопрос, какую кодировку Unicode использовать при кодировании строки .NET в base64? Я знаю, что строки UTF-16 закодированы в Windows, так ли мой способ кодирования является правильным?

public static String ToBase64String(this String source) {
        return Convert.ToBase64String(Encoding.Unicode.GetBytes(source));
    }
4b9b3361

Ответ 1

То, что вы предоставили, абсолютно функционально. Он будет генерировать строку с кодировкой base64 из байтов исходной строки, закодированной в UTF-16.

Если вы спрашиваете, может ли UTF-16 представлять любой символ в вашей строке, тогда да. Единственная разница между UTF-16 и UTF-32 заключается в том, что UTF-16 является кодировкой переменной длины; он использует два байта для представления символов внутри подмножества и четыре байта для всех других символов.

Нет юникодовых символов, которые не могут быть представлены UTF-16.

Ответ 2

Вот решение, я преобразовал случайное преобразование строк, как вы можете дать любой размер до 10, который будет выводить Base64.

//This function will return a random string from the given numeric characters
public string RandomString(int size)
{
const string legalCharacters = "1234567890";
Random random = new Random();
StringBuilder builder = new StringBuilder();
char ch = '\0';

for (int i = 0; i <= size - 1; i++) {
    ch = legalCharacters(random.Next(0, legalCharacters.Length));
    builder.Append(ch);
}
return builder.ToString();
}
public const string BASE64 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
public string DecToBase64(long lVal)
{
string sVal = null;
sVal = "";
while (lVal >= 64) {
    sVal = sVal + DecToBase64(lVal / 64);
    lVal = lVal - 64 * (lVal / 64);
}
sVal = sVal + Strings.Mid(BASE64, Convert.ToInt32(lVal) + 1, 1);
return sVal;
}

//here is how we can have result in variable:
string Base64 = "";
Base64 = DecToBase64(RandomString(10)); //this will produce a combination up-to length of 10

Ответ 3

Имейте в виду, что вам не нужно использовать UTF-16 только из-за того, что используют строки .NET. Когда вы создаете этот массив байтов, вы можете выбрать любую кодировку, которая будет обрабатывать все символы в вашей строке. Например, UTF-8 будет более эффективным, если текст будет на латинском языке, но он все равно сможет обрабатывать каждый известный символ.

Самое главное, что любое программное обеспечение декодирует строку base64, должно знать, какая кодировка применяется к массиву байтов, чтобы повторно создать исходную строку.

Ответ 4

MSDN подтверждает, что класс UnicodeEncoding представляет кодировку UTF-16 символов Unicode.