61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
"""
|
||
Lab001, часть 2.
|
||
Русский текст, символы, байты и кодировка UTF-8.
|
||
|
||
Цель:
|
||
1. Увидеть разницу между количеством символов и количеством байтов.
|
||
2. Посмотреть, сколько байтов занимает каждая русская буква.
|
||
3. Восстановить исходный текст из байтов.
|
||
"""
|
||
|
||
# Исходное сообщение
|
||
message = "ПРИВЕТ SDR"
|
||
|
||
# Преобразование текста в байты UTF-8
|
||
encoded_message = message.encode("utf-8")
|
||
|
||
# Обратное преобразование байтов в текст
|
||
decoded_message = encoded_message.decode("utf-8")
|
||
|
||
|
||
print("Исходный текст:")
|
||
print(message)
|
||
|
||
print("\nКоличество символов:")
|
||
print(len(message))
|
||
|
||
print("\nКоличество байтов UTF-8:")
|
||
print(len(encoded_message))
|
||
|
||
print("\nОбъект bytes:")
|
||
print(encoded_message)
|
||
|
||
print("\nВсе байты в десятичном виде:")
|
||
print(list(encoded_message))
|
||
|
||
print("\nПодробно по каждому символу:")
|
||
|
||
for character in message:
|
||
character_bytes = character.encode("utf-8")
|
||
|
||
decimal_bytes = list(character_bytes)
|
||
|
||
binary_bytes = " ".join(
|
||
f"{byte:08b}" for byte in character_bytes
|
||
)
|
||
|
||
print(
|
||
f"{character!r:>4} "
|
||
f"→ байтов: {len(character_bytes)} "
|
||
f"→ числа: {decimal_bytes} "
|
||
f"→ биты: {binary_bytes}"
|
||
)
|
||
|
||
print("\nВосстановленный текст:")
|
||
print(decoded_message)
|
||
|
||
# Автоматические проверки
|
||
assert decoded_message == message
|
||
assert len(encoded_message) >= len(message)
|
||
|
||
print("\nПроверка пройдена: русский текст восстановлен без ошибок.") |