【问题标题】:Double quotes in bytes object vs double qoutes in flask response data字节对象中的双引号与烧瓶响应数据中的双引号
【发布时间】:2019-07-12 07:55:00
【问题描述】:

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

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

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

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

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

失败了,因为" 在编码时仍然是",但Web 应用程序会以" 进行响应。

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

【问题讨论】:

    标签: python escaping html-escape-characters


    【解决方案1】:

    Web 应用程序在编码为 utf-8 之前使用 html 实体代码对双引号进行编码。你可以使用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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-17
      • 2011-09-17
      • 2012-12-13
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      相关资源
      最近更新 更多