Проблема здесь в том, что вы выводите данные в виде байтовой строки, также известной как тип bytes
в Python. Этот тип данных часто встречается при взаимодействии с данными / контентом, созданным за пределами приложения. По сути, Python не знает окончательно, какой стандарт кодирования использовать при попытке интерпретировать данные в буфере. Вместо того, чтобы пытаться угадать это, Python предоставит разработчику решать, как интерпретировать необработанные данные, содержащиеся в байтовой строке. Это обеспечивает совместимость с системами кодирования символов, которые используют более одного байта на символ (например, UTF-16 и UTF-32 ). Однако это также означает, что разработчики должны преобразовать данные из bytes
в str
, прежде чем они смогут взаимодействовать с такими данными в своих приложениях.
В вашем случае вам, скорее всего, следует интерпретировать данные как UTF-8. Для этого вы должны заменить текущую строку печати на:
print(ping.before.decode('utf-8', 'ignore'))
Чтобы прояснить эту команду, мы взаимодействуем с объектом bytes , чтобы вызвать метод decode(...)
, и мысначала предоставляем метод декодирования с кодеком кодировки символов, который мы хотели бы интерпретировать как данные, а во-вторых, с названием подхода к обработке ошибок, который мы хотим использовать. Подход к обработке ошибок для декодирования имеет множество возможных значений, но есть два общих подхода: ignore и строгий , с строгим в качестве обработчика по умолчанию.
Обработчик ignore , по сути, сообщает методу декодирования, что, если он сталкивается со значением, которое он не может интерпретировать / декодировать, он должен молча отбросить это значение и продолжить декодирование оставшихся значений.
С другой стороны, строгий сообщает методу декодирования, что он должен остановить всю обработку и вызвать ошибку (в частности, UnicodeError ).
Вы можете прочитать большео параметрах кодирования / декодирования ошибок на странице документации Python для Обработка ошибок кодека .