{"id":"b1ad88480fbd8f59","repo":"aio-libs/aiohttp","slug":"unknown-content-transfer-encoding-te-encoding","errorCode":null,"errorMessage":"unknown content transfer encoding: {te_encoding}","messagePattern":"unknown content transfer encoding: (.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"aiohttp/multipart.py","lineNumber":1036,"sourceCode":"                not {CONTENT_ENCODING, CONTENT_LENGTH, CONTENT_TRANSFER_ENCODING}\n                & payload.headers.keys()\n            )\n            # Set default Content-Disposition in case user doesn't create one\n            if CONTENT_DISPOSITION not in payload.headers:\n                name = f\"section-{len(self._parts)}\"\n                payload.set_content_disposition(\"form-data\", name=name)\n        else:\n            # compression\n            encoding = payload.headers.get(CONTENT_ENCODING, \"\").lower()\n            if encoding and encoding not in (\"deflate\", \"gzip\", \"identity\"):\n                raise RuntimeError(f\"unknown content encoding: {encoding}\")\n            if encoding == \"identity\":\n                encoding = None\n\n            # te encoding\n            te_encoding = payload.headers.get(CONTENT_TRANSFER_ENCODING, \"\").lower()\n            if te_encoding not in (\"\", \"base64\", \"quoted-printable\", \"binary\"):\n                raise RuntimeError(f\"unknown content transfer encoding: {te_encoding}\")\n            if te_encoding == \"binary\":\n                te_encoding = None\n\n            # size\n            size = payload.size\n            if size is not None and not (encoding or te_encoding):\n                payload.headers[CONTENT_LENGTH] = str(size)\n\n        self._parts.append((payload, encoding, te_encoding))  # type: ignore[arg-type]\n        return payload\n\n    def append_json(\n        self, obj: Any, headers: Mapping[str, str] | None = None\n    ) -> Payload:\n        \"\"\"Helper to append JSON part.\"\"\"\n        if headers is None:\n            headers = CIMultiDict()\n","sourceCodeStart":1018,"sourceCodeEnd":1054,"githubUrl":"https://github.com/aio-libs/aiohttp/blob/c0ef574e29109210e96e652771ae4e7b88615fa4/aiohttp/multipart.py#L1018-L1054","documentation":"Raised by MultipartWriter.append_payload() (non-form-data path) when a part's Content-Transfer-Encoding header is not one of base64, quoted-printable, or binary (empty is also allowed). The writer only implements those transfer encodings, so unrecognized values are rejected.","triggerScenarios":"Appending a Payload whose headers set Content-Transfer-Encoding to e.g. '8bit', '7bit', 'uuencode', or a typo, on a non-form-data MultipartWriter. Note: form-data writers assert that Content-Transfer-Encoding is absent (RFC 7578 §4.8).","commonSituations":"Forwarding MIME-style parts that include 7bit/8bit transfer encoding; manually setting Content-Transfer-Encoding to a value the writer doesn't serialize; copy-pasting email headers into HTTP multipart.","solutions":["Use only 'base64', 'quoted-printable', or 'binary' (or remove the header) for non-form-data parts.","For 7bit/8bit content, drop the header (treat as binary) since HTTP does not require transfer encoding.","For form-data, never set Content-Transfer-Encoding at all."],"exampleFix":"// before\npayload.headers['Content-Transfer-Encoding'] = '8bit'\nwriter.append_payload(payload)  # -> RuntimeError\n// after\ndel payload.headers['Content-Transfer-Encoding']\nwriter.append_payload(payload)\n","handlingStrategy":"validation","validationCode":"cte = payload.headers.get('Content-Transfer-Encoding', '').lower()\nif cte and cte not in ('base64', 'quoted-printable', 'binary'):\n    del payload.headers['Content-Transfer-Encoding']","typeGuard":"def is_writer_supported_cte(payload) -> bool:\n    cte = payload.headers.get('Content-Transfer-Encoding', '').lower()\n    return cte in ('', 'base64', 'quoted-printable', 'binary')","tryCatchPattern":"try:\n    writer.append_payload(payload)\nexcept RuntimeError:\n    payload.headers.pop('Content-Transfer-Encoding', None)\n    writer.append_payload(payload)","preventionTips":["Avoid Content-Transfer-Encoding on HTTP multipart; it is a MIME concept.","Never set CTE on form-data parts (RFC 7578 forbids it).","Strip 7bit/8bit CTE values from forwarded MIME parts."],"tags":["multipart","content-transfer-encoding","writer","mime"],"analyzedSha":"c0ef574e29109210e96e652771ae4e7b88615fa4","analyzedAt":"2026-08-04T19:51:05.467Z","schemaVersion":2}