Python3 и ConfigParser по-разному возвращают HTML-символы Юникода - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть этот INI-файл

[temp]
units = \u00b0 C

Если я получу значение с помощью ConfigParser, я получу следующий результат

pi@pi-vm1:~ $ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04)
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from configparser import ConfigParser
>>> parser = ConfigParser()
>>> parser.read('/home/pi/myapp/units.ini', encoding='utf-8')
['/home/pi/myapp/units.ini']
>>> items = parser.items('temp')
>>> print(items[0])
('units', '\\u00b0 C')

Это передается как ответ API, и в результате браузер отображает \ u00b0 на странице.

Если я введу код непосредственно:

units = "\u00b0C"

Тогда это прекрасно работает и отображается как символ степени

Итак, в основном эти две строки отображают разные результаты.

units = unitsConfig['units']
units = "\u00b0C"

Как я могу заставить метод файла конфигурации возвращать ту же строку, как если бы я указал ее непосредственно в коде?

1 Ответ

0 голосов
/ 04 сентября 2018

Синтаксис ConfigParser отличается от синтаксиса Python. Формат файла .ini не имеет какого-либо механизма экранирования, как в Python для строк.

Если вы хотите, чтобы в значении был символ градуса, просто вставьте литерал ° в файл конфигурации:

units = °C

Затем убедитесь, что INI-файл сохранен с UTF-8, поскольку вы прочитаете его с этим кодеком позже. Это должно сработать.

...