В настоящее время у меня есть Python 2.7 код, который получает <str>
объекты через сокетное соединение.Во всем коде мы используем <str>
объекты, сравнения и т. Д. Чтобы преобразовать в Python 3 , я обнаружил, что соединения с сокетами теперь возвращают <bytes>
объекты, что требует от нас изменения всех литералов.быть похожим на b'abc'
делать буквальные сравнения и т. д. Это большая работа, и хотя очевидно, почему это изменение было сделано в Python 3 Мне любопытно, есть ли более простые обходные пути.
Скажем, я получаю <bytes> b'\xf2a27'
через сокетное соединение.Есть ли простой способ преобразовать эти <bytes>
в <str>
объект с такими же выходами в Python 3.6 ?Я сам изучил некоторые решения, но безрезультатно.
a = b'\xf2a27'.decode('utf-8', errors='backslashescape')
Выше получается '\\xf2a27'
с len(a) = 7
вместо исходного len(b'\xf2a27') = 3
.Индексирование тоже неверно, это просто не будет работать, но похоже, что оно движется по правильному пути.
a = b'\xf2a27'.decode('latin1')
Выше даёт 'òa27'
, который содержит символы Юникода, которых я хотел бы избежать.Хотя в этом случае len(a) = 5
и сравнения, такие как a[0] == '\xf2'
, работают, но я бы хотел сохранить информацию в представлении, если это возможно.
Возможно, есть более элегантное решение, которое мне не хватает?