From 53694b11ed9a469b23ccf6d8769b5597f0782af8 Mon Sep 17 00:00:00 2001 From: Newman Gao Date: Wed, 23 Sep 2026 14:18:13 +0800 Subject: [PATCH] Decode percent-encoded data URI parameters --- packages/markitdown/src/markitdown/_uri_utils.py | 4 ++-- packages/markitdown/tests/test_module_misc.py | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/markitdown/src/markitdown/_uri_utils.py b/packages/markitdown/src/markitdown/_uri_utils.py index 9deb8ecaba..0014e01cf8 100644 --- a/packages/markitdown/src/markitdown/_uri_utils.py +++ b/packages/markitdown/src/markitdown/_uri_utils.py @@ -3,7 +3,7 @@ import os from typing import Tuple, Dict from urllib.request import url2pathname -from urllib.parse import urlparse, unquote_to_bytes +from urllib.parse import unquote, urlparse, unquote_to_bytes def _is_unc_or_device_path(path: str) -> bool: @@ -66,7 +66,7 @@ def parse_data_uri(uri: str) -> Tuple[str | None, Dict[str, str], bytes]: # Handle key=value pairs in the middle if "=" in part: key, value = part.split("=", 1) - attributes[key.lower()] = value + attributes[key.lower()] = unquote(value) elif len(part) > 0: attributes[part.lower()] = "" diff --git a/packages/markitdown/tests/test_module_misc.py b/packages/markitdown/tests/test_module_misc.py index 434cd3c5bf..5527e30eee 100644 --- a/packages/markitdown/tests/test_module_misc.py +++ b/packages/markitdown/tests/test_module_misc.py @@ -268,6 +268,12 @@ def test_data_uris() -> None: assert attributes["charset"] == "utf-8" assert data == b"Hello, World!" + data_uri = "data:text/plain;charset=utf%2D8,Hello%2C%20World%21" + mime_type, attributes, data = parse_data_uri(data_uri) + assert mime_type == "text/plain" + assert attributes["charset"] == "utf-8" + assert data == b"Hello, World!" + data_uri = "data:text/plain;CHARSET=utf-8;BASE64,SGVsbG8sIFdvcmxkIQ==" mime_type, attributes, data = parse_data_uri(data_uri) assert mime_type == "text/plain"