как исправить проблему с юникодом в configparser

Я использую Python 3.7 и configparser 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 не "????" и как это исправить.


person Nisutec    schedule 01.04.2019    source источник


Ответы (1)


Мне потребовалось время, чтобы понять это, поскольку python3 видит все, как объясняется Unicode здесь

Если я правильно понимаю, исходный отпечаток выглядит так u'\U0001F882', поэтому он преобразует его в символ.

Однако, когда вы передаете переменную при использовании configparser в виде строки, escape-символ Unicode по существу теряется, например '\\U0001F882'.

Вы можете увидеть эту разницу, если распечатаете test и test2 repr

print(repr(test))
print(repr(test2))

Чтобы получить нужный результат, вам нужно будет экранировать строковое значение Unicode

print(test2.encode('utf8').decode('unicode-escape')  

Надеюсь, что это работает для вас.

person L0ngSh0t    schedule 19.04.2019