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

Double quotes in bytes object vs double qoutes in flask response data

我正在为 Flask 应用程序编写一些断言。我已经在响应中成功测试了变音符号,如下所示:

assert 'Wählen Sie ...'.encode('utf-8') in rv.data

变音符号“ä”在编码数据和来自 Web 应用程序的响应中具有相同的表示 (\xc3\xa4)。

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

assert 'Der gewünschte Monat ... z.B. "2019-5".'.encode('utf-8') in rv.data

失败,因为 " 在编码时仍然是 ",但网络应用程序响应 "

我应该如何处理要测试的字符串才能实现兼容性?

Web 应用程序使用 html 实体代码在编码为 utf-8 之前对双引号进行编码。您 可以 使用 html.escape 函数来模拟这个,但不幸的是它用 " 代替了 '"' 而不是 ".

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

>>> 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".'

相反的方法是解码并取消转义服务器响应并将其与原始字符串进行比较。您可以为此使用 html.unescape 函数,因为它会取消转义数字转义:

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