Какая разница между UTF8/UTF16 и Base64 с точки зрения кодирования
В. С#
Мы можем использовать классы ниже для кодирования:
-
System.Text.Encoding.UTF8
-
System.Text.Encoding.UTF16
-
System.Text.Encoding.ASCII
Почему нет System.Text.Encoding.Base64
?
Мы можем использовать только метод Convert.From(To)Base64String
, какой особенностью является base64?
Можно ли сказать, что base64 - это тот же метод кодирования, что и UTF-8? Или UTF-8 является одним из base64?
Ответы
Ответ 1
UTF-8 и UTF-16 - это методы кодирования последовательностей Unicode в байтовые последовательности.
Смотрите: Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (без отговорок!)
Base64 - это метод кодирования последовательности байтов в строку.
Итак, это самые разные понятия и их не следует путать.
Что нужно помнить:
-
Не каждая последовательность байтов представляет строку Юникода, закодированную в UTF-8 или UTF-16.
-
Не каждая строка Юникода представляет последовательность байтов, закодированную в Base64.
Ответ 2
Base64 - это способ кодирования двоичных данных, в то время как UTF8 и UTF16 - это способы кодирования текста Unicode. Обратите внимание, что на языке Python 2.x, где двоичные данные и строки смешаны, вы можете кодировать строки в base64 или utf8 одинаково:
u'abc'.encode('utf16')
u'abc'.encode('base64')
Но на языках, где существует более четкое разделение между двумя типами данных, два способа представления данных обычно имеют совершенно разные утилиты, чтобы сохранить проблемы отдельно.
Ответ 3
UTF-8 похож на другой кодировки UTF кодировку символов для кодирования символов Набор символов Unicode UCS.
Base64 - это кодировка для представления любой последовательности байтов с помощью последовательности печатаемых символов (т.е. A
- Z
, A
- Z
, 0
- 9
, +
и /
).
Нет System.Text.Encoding.Base64, потому что Base64 не a text encoding
, а скорее базовое преобразование, такое как hexadecimal, который использует цифры 0
- 9
и A
- F
(или A
- F
) для представления чисел.
Ответ 4
Если не использовать Base64?
Как @Scott Chamberlain ответ в Как применить дополнение для Base64
Base64 - это способ представления двоичных значений в виде текста, чтобы вы не противоречили общим управляющим кодам типа \x0A для новой строки или \0 для ограничителя строк. Это НЕ для преобразования напечатанного текста в двоичный файл.
Ответ 5
Проще говоря, кодирование, например UTF8 или UTF16, полезно для сопоставления чисел, то есть байтов с символами, и наоборот, например, в ASCII 65 сопоставляется с "A", в то время как базовое кодирование переводит байты в байты так, чтобы результирующее байты, преобразованные из одного байта, пригодны для печати и являются подмножеством кодировки ASCII-символов, поэтому Base64 также можно рассматривать как механизм кодирования байтов в текст. Тем не менее, теперь должно быть ясно, что вы можете иметь поток, закодированный в Base64, который представляет поток, закодированный в UTF8.