Я перемещаю свое приложение с Python2 на Python 3. Приложение сохраняет конфигурацию в файл, и перед сохранением один из атрибутов кодируется в utf-8.
Например: username='ᚠᛇᚻ᛫ᛒᛦᚦ᛫ᚠᚱᚩᚠᚢᚱ' сохраняется как '\xe1\x9a\xa0\xe1\x9b....x9a\xb1' (преобразованный тип данных - str)
Поскольку этот файл конфигурации будет сохранен при миграции, когда я пытаюсь получить имя пользователя, я не могу декодировать его обратно в unicode, как в python3, объект str не имеет декодирования атрибута. В идеале сохраненное значение в файле должно обрабатываться как байты, но поскольку python2 этого не делает, это создает проблему.
Я не могу преобразовать это в байтовый объект, так как он меняет всю строку, пробовал то же самое.
Невозможно изменить текущий код приложения, так как он уже находится в рабочей среде.
Я попытался добавить 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.
open(filename, 'r', encoding='utf-8')
- person Error - Syntactical Remorse   schedule 12.04.2019