Python 字节中的双引号对象与烧瓶响应数据中的双引号

Python 字节中的双引号对象与烧瓶响应数据中的双引号,python,escaping,html-escape-characters,Python,Escaping,Html Escape Characters,我正在为flask应用程序编写一些断言。我已经成功地在响应中测试了Umlauts,如下所示: 在rv.data中断言“Wählen Sie…”。编码('utf-8') Umlaut“ä”在编码数据和来自web应用程序的响应中具有相同的表示(\xc3\xa4) 但现在,我尝试用双引号来做同样的事情: assert'Der gewünschte Monat。。。z、 B.“2019-5”。在rv数据中编码('utf-8') 它失败了,因为编码时,“仍然是”,但web应用程序响应为"取而代之 为

我正在为flask应用程序编写一些断言。我已经成功地在响应中测试了Umlauts,如下所示:

在rv.data中断言“Wählen Sie…”。编码('utf-8')

Umlaut“ä”在编码数据和来自web应用程序的响应中具有相同的表示(
\xc3\xa4

但现在,我尝试用双引号来做同样的事情:

assert'Der gewünschte Monat。。。z、 B.“2019-5”。在rv数据中编码('utf-8')

它失败了,因为编码时,
仍然是
,但web应用程序响应为
"取而代之


为了实现兼容性,我应该如何处理正在测试的字符串?

web应用程序正在使用html实体代码对双引号进行编码,然后再编码为utf-8。您可以使用该函数来模拟这种情况,但不幸的是,它将“””替换为
,而不是
"

函数不会自动转义双引号,但它接受要转义的字符字典和转义值,因此您可以使用它生成文本:

>>> from xml.sax import saxutils
>>> escaped = saxutils.escape('Der gewünschte Monat ... z.B. "2019-5".', {'"': '"'})
>>> escaped
'Der gewünschte Monat ... z.B. "2019-5".'
相反的方法是解码和取消扫描服务器响应,并将其与原始字符串进行比较。您可以为此使用该函数,因为它将取消数值转义:

>>> import html
>>> response = html.unescape(rv.data.decode('utf-8'))
>>> assert 'Der gewünschte Monat ... z.B. "2019-5".'.encode('utf-8') in response