Я перемещаю свое приложение из Python2 в Python 3. Приложение сохраняет конфигурацию в файл, и один из атрибутов перед сохранением кодируется в utf-8.
Например: username = 'ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ' сохраняется как '\ xe1 \ x9a \ xa0 \ xe1 \ x9b .... x9a \ xb1' (преобразованный тип данных str)
Поскольку этот файл конфигурации будет сохраняться при переносе, когда я пытаюсь получить имя пользователя, я не могу декодировать его обратно в Unicode, как в python3, объект str не имеет атрибута decode.В идеале сохраненное значение в файле должно рассматриваться как байты, но поскольку python2 этого не делает, это создает проблему.
Я не могу преобразовать это в байтовый объект, поскольку он изменяет всю строку, пробовал то же самое.
Невозможно изменить текущий код приложения, поскольку он уже находится в производстве.
Iпопытался добавить b 'вручную перед строкой, что и помогло.Но это взломать.Пробовал ast.literal_eval, но опять-таки это не работает.
В настоящее время псевдокоды, которые отлично работают на Python2 (до перехода на python3):
1. To save value in text file:
fp=open(filename,'w')
encoded_name=name.encode('utf-8')
fp.write(encoded_name)
fp.close()
2. To retrieve:
fp.open(filename, 'r') #or rb
encoded_name=fp.read()
fp.close()
return encoded_name.decode('utf-8)
Ожидаемые результаты: получено имя пользователя из файла конфигурацииследует рассматривать как байты вместо str.