Я только что узнал о кодировании строк в python и, немного поигравшись с ним, меня смутил тот факт, что размер пустой строки ('') равен 0 в utf 8 и ascii, но как-то 2 в utf 16 ? как получилось?
print(len(''.encode('utf16'))) # is 2
print(len(''.encode('utf8'))) # is 0
Полагаю, большая часть проблемы в том, что я не понимаю, как работает utf 16. Я не понимаю, почему кодирование «спама» в utf 16 должно быть длиной 10 байт вместо 8 байтов (2 байта (16 бит) для каждого символа). Я предполагаю, что 2 байта необходимы в UTF 16 по умолчанию для любой строки для заполнения или что-то?
* редактировать
Меня НЕ смущают основы того, как работают UTF 8 или UTF 16, и различаются они для хранения каждого отдельного символа. Меня смущает, как отсутствие каких-либо символов (пустая строка) будет храниться в 2 байтах в UTF 16, но иметь 0 байтов в UTF 8. (в отличие от 1 байта или 0 для обоих)
Ссылка не дает ответа на мой вопрос.