У меня есть вопрос, какое кодирование Unicode использовать при кодировании.NET представляют в виде строки в base64? Я знаю, что строки являются UTF-16, закодированным в Windows, так мой способ закодировать, правильный?
public static String ToBase64String(this String source) {
return Convert.ToBase64String(Encoding.Unicode.GetBytes(source));
}
То, что вы предоставили, прекрасно работает. Он создаст строку в кодировке base64 байтов вашей исходной строки, закодированной в UTF-16.
Если вы спрашиваете, может ли UTF-16 представлять любой символ в вашей строке, тогда да. Единственная разница между UTF-16 и UTF-32 заключается в том, что UTF-16 - это кодировка переменной длины; он использует два байта для представления символов в подмножестве и четыре байта для всех остальных символов.
Нет символов Юникода, которые не могут быть представлены в UTF-16.
Имейте в виду, что у вас нет для использования UTF-16 только потому, что это то, что используют строки .NET. Когда вы создаете этот массив байтов, вы можете выбрать любую кодировку, которая будет обрабатывать все символы в вашей строке. Например, UTF-8 был бы более эффективным, если бы текст был на языке, основанном на латинице, но он по-прежнему может обрабатывать все известные символы.
Самая важная проблема заключается в том, что любое программное обеспечение, декодирующее строку base64, должно знать, какую кодировку применить к массиву байтов для воссоздания исходной строки.
MSDN подтверждает, что класс UnicodeEncoding
представляет собой Кодировка символов Юникода UTF-16
.