diff --git a/CHANGES.rst b/CHANGES.rst
index 596f15319..354591a69 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -11,6 +11,8 @@ https://github.com/zopefoundation/Zope/blob/4.x/CHANGES.rst
 5.0a3 (unreleased)
 ------------------
 
+- Fix export of files with non-latin-1 compatible names
+  (`#890 <https://github.com/zopefoundation/Zope/issues/890>`_)
 
 - Add ``pyupgrade`` via ``pre-commit``
   (`#859 <https://github.com/zopefoundation/Zope/issues/859>`_)
diff --git a/src/OFS/ObjectManager.py b/src/OFS/ObjectManager.py
index 7751157cd..73f7fafbe 100644
--- a/src/OFS/ObjectManager.py
+++ b/src/OFS/ObjectManager.py
@@ -61,6 +61,7 @@ from zope.interface import implementer
 from zope.interface.interfaces import ComponentLookupError
 from zope.lifecycleevent import ObjectAddedEvent
 from zope.lifecycleevent import ObjectRemovedEvent
+from ZPublisher.HTTPResponse import make_content_disposition
 
 
 # Constants: __replaceable__ flags:
@@ -611,8 +612,10 @@ class ObjectManager(
 
             if RESPONSE is not None:
                 RESPONSE.setHeader('Content-type', 'application/data')
-                RESPONSE.setHeader('Content-Disposition',
-                                   f'inline;filename={id}.{suffix}')
+                RESPONSE.setHeader(
+                    'Content-Disposition',
+                    make_content_disposition('inline', f'{id}.{suffix}')
+                )
             return result
 
         f = os.path.join(CONFIG.clienthome, f'{id}.{suffix}')
diff --git a/src/ZPublisher/HTTPResponse.py b/src/ZPublisher/HTTPResponse.py
index 0883983df..8daf4d9c6 100644
--- a/src/ZPublisher/HTTPResponse.py
+++ b/src/ZPublisher/HTTPResponse.py
@@ -115,6 +115,30 @@ def build_http_date(when):
         WEEKDAYNAME[wd], day, MONTHNAME[month], year, hh, mm, ss)
 
 
+def make_content_disposition(disposition, file_name):
+    """Create HTTP header for downloading a file with a UTF-8 filename.
+
+    See this and related answers: https://stackoverflow.com/a/8996249/2173868.
+    """
+    header = f'{disposition}'
+    try:
+        file_name.encode('us-ascii')
+    except UnicodeEncodeError:
+        # the file cannot be encoded using the `us-ascii` encoding
+        # which is advocated by RFC 7230 - 7237
+        #
+        # a special header has to be crafted
+        # also see https://tools.ietf.org/html/rfc6266#appendix-D
+        encoded_file_name = file_name.encode('us-ascii', errors='ignore')
+        header += f'; filename="{encoded_file_name}"'
+        quoted_file_name = quote(file_name)
+        header += f'; filename*=UTF-8\'\'{quoted_file_name}'
+        return header
+    else:
+        header += f'; filename="{file_name}"'
+        return header
+
+
 class HTTPBaseResponse(BaseResponse):
     """ An object representation of an HTTP response.
 

diff --git a/src/Testing/ZopeTestCase/testZODBCompat.py b/src/Testing/ZopeTestCase/testZODBCompat.py
index a879d4606..c1f9a1b52 100644
--- a/src/Testing/ZopeTestCase/testZODBCompat.py
+++ b/src/Testing/ZopeTestCase/testZODBCompat.py
@@ -32,6 +32,24 @@ folder_name = ZopeTestCase.folder_name
 cutpaste_permissions = [add_documents_images_and_files, delete_objects]
 
 
+def make_request_response(environ=None):
+    from io import StringIO
+    from ZPublisher.HTTPRequest import HTTPRequest
+    from ZPublisher.HTTPResponse import HTTPResponse
+
+    if environ is None:
+        environ = {}
+
+    stdout = StringIO()
+    stdin = StringIO()
+    resp = HTTPResponse(stdout=stdout)
+    environ.setdefault('SERVER_NAME', 'foo')
+    environ.setdefault('SERVER_PORT', '80')
+    environ.setdefault('REQUEST_METHOD', 'GET')
+    req = HTTPRequest(stdin, environ, resp)
+    return req, resp
+
+
 class DummyObject(SimpleItem):
     id = 'dummy'
     foo = None
@@ -96,6 +114,8 @@ class TestImportExport(ZopeTestCase.ZopeTestCase):
     def afterSetUp(self):
         self.setupLocalEnvironment()
         self.folder.addDTMLMethod('doc', file='foo')
+        # please note the usage of the turkish i
+        self.folder.addDTMLMethod('ıq', file='foo')
         # _p_oids are None until we create a savepoint
         self.assertEqual(self.folder._p_oid, None)
         transaction.savepoint(optimistic=True)
@@ -105,6 +125,23 @@ class TestImportExport(ZopeTestCase.ZopeTestCase):
         self.folder.manage_exportObject('doc')
         self.assertTrue(os.path.exists(self.zexp_file))
 
+    def testExportNonLatinFileNames(self):
+        """Test compatibility of the export with unicode characters.
+
+        Since Zope 4 also unicode ids can be used."""
+        _, response = make_request_response()
+        # please note the usage of a turkish `i`
+        self.folder.manage_exportObject(
+            'ıq', download=1, RESPONSE=response)
+
+        found = False
+        for header in response.listHeaders():
+            if header[0] == 'Content-Disposition':
+                # value needs to be `us-ascii` compatible
+                assert header[1].encode("us-ascii")
+                found = True
+        self.assertTrue(found)
+
     def testImport(self):
         self.folder.manage_exportObject('doc')
         self.folder._delObject('doc')
diff --git a/src/ZPublisher/tests/testHTTPResponse.py b/src/ZPublisher/tests/testHTTPResponse.py
index da1665235..22e94d7bb 100644
--- a/src/ZPublisher/tests/testHTTPResponse.py
+++ b/src/ZPublisher/tests/testHTTPResponse.py
@@ -8,6 +8,7 @@ from zExceptions import InternalError
 from zExceptions import NotFound
 from zExceptions import ResourceLockedError
 from zExceptions import Unauthorized
+from ZPublisher.HTTPResponse import make_content_disposition
 
 
 class HTTPResponseTests(unittest.TestCase):
@@ -1373,3 +1374,29 @@ class HTTPResponseTests(unittest.TestCase):
     def test_isHTML_not_decodable_bytes(self):
         response = self._makeOne()
         self.assertFalse(response.isHTML('bïñårÿ'.encode('latin1')))
+
+
+class MakeDispositionHeaderTests(unittest.TestCase):
+
+    def test_ascii(self):
+        self.assertEqual(
+            make_content_disposition('inline', 'iq.png'),
+            'inline; filename="iq.png"')
+
+    def test_latin_one(self):
+        self.assertEqual(
+            make_content_disposition('inline', 'Dänemark.png'),
+            'inline; filename="b\'Dnemark.png\'"; filename*=UTF-8\'\'D%C3%A4nemark.png'  # noqa: E501
+        )
+
+    def test_unicode(self):
+        """HTTP headers need to be latin-1 compatible
+
+        In order to offer file downloads which contain unicode file names,
+        the file name has to be treated in a special way, see
+        https://stackoverflow.com/questions/1361604 .
+        """
+        self.assertEqual(
+            make_content_disposition('inline', 'ıq.png'),
+            'inline; filename="b\'q.png\'"; filename*=UTF-8\'\'%C4%B1q.png'
+        )

Export / download of files with non-latin-1 compatible names is broken
**Reproduction**
- upload a file via ZMI with the name "ıqrm.png" (please note, the first letter is a turkish i)
- try to export it
- waitress error

```
2020-09-24 14:57:24,528 ERROR   [waitress:358][waitress-0] Exception while serving /bliss/db/manage_exportObject
Traceback (most recent call last):
  File "/home/jugmac00/Projects/bliss_deployment/work/_/home/jugmac00/.batou-shared-eggs/waitress-1.4.4-py3.7.egg/waitress/channel.py", line 350, in service
    task.service()
  File "/home/jugmac00/Projects/bliss_deployment/work/_/home/jugmac00/.batou-shared-eggs/waitress-1.4.4-py3.7.egg/waitress/task.py", line 171, in service
    self.execute()
  File "/home/jugmac00/Projects/bliss_deployment/work/_/home/jugmac00/.batou-shared-eggs/waitress-1.4.4-py3.7.egg/waitress/task.py", line 479, in execute
    self.write(chunk)
  File "/home/jugmac00/Projects/bliss_deployment/work/_/home/jugmac00/.batou-shared-eggs/waitress-1.4.4-py3.7.egg/waitress/task.py", line 311, in write
    rh = self.build_response_header()
  File "/home/jugmac00/Projects/bliss_deployment/work/_/home/jugmac00/.batou-shared-eggs/waitress-1.4.4-py3.7.egg/waitress/task.py", line 284, in build_response_header
    return tobytes(res)
  File "/home/jugmac00/Projects/bliss_deployment/work/_/home/jugmac00/.batou-shared-eggs/waitress-1.4.4-py3.7.egg/waitress/compat.py", line 69, in tobytes
    return bytes(s, "latin-1")
UnicodeEncodeError: 'latin-1' codec can't encode character '\u0131' in position 54: ordinal not in range(256)
```

Actually, this was not my use case. I have a custom download (and a file view) in my Zope app, and noticed that the following code is broken for non latin-1 names:
```
    def download(self, REQUEST):
        """
        download the attachment
         @REQUEST : request
        """
        with open(self.completeFileName(), "rb") as f:
            ret = f.read()
        REQUEST.RESPONSE.setHeader('content-type', self.getMimeType())
        REQUEST.RESPONSE.setHeader('content-length', str(len(ret)))
        REQUEST.RESPONSE.setHeader('content-disposition', 'attachment; filename="%s"' % self.printFileName())
        return ret
```

I then grepped the Zope source for a possible solution and found above bug.

**possible solutions**
- `zope.file` offers some solution - but when I understand that correctly, it changes the file name by double en- and decoding (which seems wrong to me, but possibly I do not understand the trick)
- `cherrypy` and afaik `Django` handle this differently

**zope.file**
https://github.com/zopefoundation/zope.file/blob/b952af17c23f7702b95a93b28b6458b38560874b/src/zope/file/download.py#L65-L70

**cherrypy**
https://github.com/cherrypy/cherrypy/pull/1851/files#diff-1b04e50f6724343e4321295525e2bd58R32

**django-sendfile**
https://github.com/johnsensible/django-sendfile/blob/7a000e0e7ae1732bcea222c7872bfda6a97c495c/sendfile/__init__.py#L69-L86

In my Zope app I implemented `cherrypy`s solution and it works like a charm.

As there is also a bug in Zope's `manage_exportObject` I'd like to have a function in Zope itself, given a filename and the type (inline or attachment), builds a correct header.

I'd volunteer to implement a solution during next Monday's Zope sprint.

@d-maurer @icemac - Maybe there is something I overlook? I hardly can't imagine nobody ever wanted to offer a file download for non-latin-1 names before?

P.S.: Maybe also both the comment of the `setHeader` method and the method itself should be updated, ie either warn or prohibit to set non-latin-1 values.
src/Testing/ZopeTestCase/testZODBCompat.py::TestCopyPaste::testClone src/Testing/ZopeTestCase/testZODBCompat.py::TestCopyPaste::testCopyPaste src/Testing/ZopeTestCase/testZODBCompat.py::TestCopyPaste::testCutPaste src/Testing/ZopeTestCase/testZODBCompat.py::TestCopyPaste::testRename src/Testing/ZopeTestCase/testZODBCompat.py::TestImportExport::testExport src/Testing/ZopeTestCase/testZODBCompat.py::TestImportExport::testExportNonLatinFileNames src/Testing/ZopeTestCase/testZODBCompat.py::TestImportExport::testImport src/Testing/ZopeTestCase/testZODBCompat.py::TestTransactionAbort::testTransactionAbort src/Testing/ZopeTestCase/testZODBCompat.py::test_suite src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__after_addHeader src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__after_expireCookie src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__after_redirect src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__after_setCookie_appendCookie src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__after_setHeader src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__after_setHeader_literal src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__already_wrote src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__empty src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__existing_content_length src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__existing_transfer_encoding src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test___str__w_body src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test__encode_unicode_no_content_type_uses_default_encoding src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test__encode_unicode_w_content_type_no_charset_updates_charset src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test__encode_unicode_w_content_type_w_charset src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test__encode_unicode_w_content_type_w_charset_xml_preamble src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test__unauthorized_no_realm src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test__unauthorized_w_default_realm src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test__unauthorized_w_realm src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_addHeader_drops_CRLF src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_addHeader_is_case_sensitive src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_appendCookie_no_existing src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_appendCookie_w_existing src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_appendHeader_drops_CRLF src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_appendHeader_no_existing src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_appendHeader_no_existing_case_insensative src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_appendHeader_w_existing src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_appendHeader_w_existing_case_insenstative src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_badRequestError_invalid_parameter_name src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_badRequestError_valid_parameter_name src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_body_already_matches_charset_unchanged src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_body_recodes_to_match_content_type_charset src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_charset_application_header_no_header src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_charset_application_header_with_header src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_charset_no_content_type_header src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_charset_text_header_no_charset_defaults_latin1 src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_charset_unicode_body_application_header src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_charset_unicode_body_application_header_diff_encoding src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_defaults src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_w_body src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_w_headers src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_w_status_code src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_w_status_errmsg src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_ctor_w_status_exception src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_debugError src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_exception_500_text src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_exception_Internal_Server_Error src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_expireCookie src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_expireCookie1160 src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_finalize_after_redirect src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_finalize_empty src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_finalize_w_body src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_finalize_w_existing_content_length src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_finalize_w_transfer_encoding src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_forbiddenError src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_forbiddenError_w_entry src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_getHeader_existing src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_getHeader_existing_not_literal src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_getHeader_existing_w_literal src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_getHeader_nonesuch src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_insertBase_HTML_no_base_w_head_not_munged src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_insertBase_HTML_w_base_no_head_not_munged src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_insertBase_HTML_w_base_w_head_munged src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_insertBase_not_HTML_no_change src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_isHTML_not_decodable_bytes src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_after_addHeader src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_after_expireCookie src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_after_redirect src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_after_setCookie_appendCookie src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_after_setHeader src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_after_setHeader_literal src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_already_wrote src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_empty src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_existing_content_length src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_existing_transfer_encoding src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_listHeaders_w_body src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_notFoundError src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_notFoundError_w_entry src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_quoteHTML src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_redirect_alreadyquoted src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_redirect_defaults src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_redirect_explicit_status src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_redirect_nonascii src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_redirect_reserved_chars src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_redirect_unreserved_chars src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_redirect_w_lock src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_retry src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBase_None src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBase_no_trailing_path src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBase_w_trailing_path src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_2_tuple_w_is_error_converted_to_Site_Error src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_2_tuple_wo_is_error_converted_to_HTML src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_calls_insertBase src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_compression_existing_encoding src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_compression_no_prior_vary_header src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_compression_no_prior_vary_header_but_forced src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_compression_too_short_to_gzip src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_compression_uncompressible_mimetype src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_compression_w_prior_vary_header_incl_encoding src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_compression_w_prior_vary_header_wo_encoding src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_empty_unchanged src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_object_with_asHTML src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_object_with_unicode src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_string_HTML src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_string_not_HTML src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_tuple src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_w_bogus_pseudo_HTML src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setBody_w_locking src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_handle_byte_values src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_handle_unicode_values src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_no_attrs src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_no_existing src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_unquoted src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_comment src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_domain src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_existing src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_expires src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_httponly_false_value src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_httponly_true_value src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_path src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_same_site src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_secure_false_value src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setCookie_w_secure_true_value src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setHeader src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setHeader_drops_CRLF src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setHeader_drops_LF src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setHeader_literal src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setStatus_BadRequest src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setStatus_Forbidden_exception src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setStatus_InternalError_exception src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setStatus_NotFound_exception src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setStatus_ResourceLockedError_exception src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setStatus_Unauthorized_exception src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setStatus_code src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_setStatus_errmsg src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_unauthorized_no_debug_mode src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_unauthorized_w_debug_mode_no_credentials src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_unauthorized_w_debug_mode_w_credentials src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_write_already_wrote src/ZPublisher/tests/testHTTPResponse.py::HTTPResponseTests::test_write_not_already_wrote src/ZPublisher/tests/testHTTPResponse.py::MakeDispositionHeaderTests::test_ascii src/ZPublisher/tests/testHTTPResponse.py::MakeDispositionHeaderTests::test_latin_one src/ZPublisher/tests/testHTTPResponse.py::MakeDispositionHeaderTests::test_unicode