По шагам:
1️⃣Строка s состоит из шести кириллических букв.
2️⃣Первый вызов len(s) считает количество символов Юникода в строке, поэтому возвращает значение 6.
3️⃣Метод encode без параметров кодирует строку в байты по стандарту UTF-8, в котором каждый символ кириллицы занимает по два байта.
4️⃣Второй вызов len(s.encode()) определяет размер полученного объекта bytes, что даёт 12 байт.
5️⃣В итоге на экран выводится 6 12.
Почему это важно
Заголовок HTTP Content-Length и многие лимиты протоколов считают байты, а не символы. Если проверять такой лимит через len(s), русский текст окажется вдвое длиннее разрешённого. А если обрезать байты посреди буквы, например "привет".encode()[:3].decode(), будет UnicodeDecodeError. Для байтовых лимитов длину считают через len(s.encode()).
Post #4913
162
- ✍ 1