【问题标题】:Python3 and ConfigParser returns unicode HTML characters differentlyPython3 和 ConfigParser 以不同的方式返回 unicode HTML 字符
【发布时间】:2018-09-04 12:40:58
【问题描述】:

我有这个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"

如何让配置文件方法返回与我直接在代码中指定的字符串相同的字符串?

【问题讨论】:

    标签: python-3.x unicode configparser


    【解决方案1】:

    ConfigParser 语法与 Python 语法不同。 .ini 文件格式没有 Python 对字符串的任何转义机制。

    如果您想在值中包含度数符号,只需在配置文件中插入文字°:

    units = °C
    

    然后确保 .ini 文件以 UTF-8 保存,因为您稍后会使用此编解码器读取它。 这应该可以解决问题。

    【讨论】:

    • 谢谢,但是当我将其粘贴到文件中时,我得到 units = \260C 该文件是 utf-8
    • 配置文件也不会接受 % 符号。我想将所有外观配置保留在代码之外,并保留在 ini 文件中,但这似乎很困难。如果我把 HTML 代码放在那里,例如 %deg; json 返回的东西搞砸了,但是这是一个更容易解决的问题吗?
    • 你得到“units = \260C”是什么意思?粘贴时编辑器会插入这个吗?或者这是你的 Python 程序的输出?在Python中以二进制模式打开ini文件时,该行是什么样的?
    • 至于百分号,它可能会干扰插值(解析对配置中其他值的引用,请参阅docs)。尝试在ConfigParser() 构造函数中设置interpolation=None
    • 我不懂 HTML/JSON 的东西,听起来很复杂。也许您应该考虑将 ini 配置替换为用 JSON 或 YAML 编写的设置。这些允许使用 ASCII 字符指定任意符号。
    猜你喜欢
    • 2023-03-09
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    相关资源
    最近更新 更多