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

时间:2019-07-12 07:55:00

标签: python escaping html-escape-characters

我正在为flask应用程序写一些断言。我已经在响应中成功测试了Umlauts:

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

Umlaut“ä”在编码数据和Web应用程序的响应中具有相同的表示形式(\xc3\xa4)。

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

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

之所以失败,是因为"在编码时仍然是",但是Web应用程序却以"响应。

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

1 个答案:

答案 0 :(得分:1)

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