Преобразовать объект .net String в строку в кодировке base64 - PullRequest
33 голосов
/ 13 апреля 2010

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

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

Ответы [ 4 ]

26 голосов
/ 13 апреля 2010

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

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

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

3 голосов
/ 06 января 2014

Вот решение, я конвертировал случайное преобразование строк, как вы можете дать любой размер до 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 голосов
/ 14 апреля 2010

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

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

2 голосов
/ 13 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...