Я использую Python 3.7 и синтаксический анализатор конфигурации 3.7.4.
У меня есть rank.ini:
[example]
placeholder : \U0001F882
И у меня есть файл main.py:
import configparser
config = configparser.ConfigParser()
config.read('ranks.ini')
print('?')
test = '\U0001F882'
print(type(test))
print(test)
test2 = config.get('example', 'placeholder')
print(type(test2))
print(test2)
Результат кода:
?
<class 'str'>
?
<class 'str'>
\U0001F882
Почему var test2 не "?" и как это исправить.
Мне потребовалось некоторое время, чтобы понять это, так как python3 видит все, как объяснил Unicode здесь
Если я правильно понимаю, исходный отпечаток выглядит так u'\U0001F882'
, поэтому он преобразует его в символ.
Однако, когда вы передаете переменную при использовании синтаксического анализатора конфигурации в виде строки, escape-символ Unicode по существу теряется, например, '\\U0001F882'
.
Вы можете увидеть эту разницу, если напечатаете test и test2 repr.
print(repr(test))
print(repr(test2))
Чтобы получить желаемый результат, вам нужно будет юникод экранировать строковое значение
print(test2.encode('utf8').decode('unicode-escape')
Надеюсь, что это работает для вас.