From a467bb67d7a242cb32edb0cadfc40928b0524895 Mon Sep 17 00:00:00 2001 From: Octopus Date: Fri, 3 Apr 2026 16:19:11 +0800 Subject: [PATCH] fix: handle None sys.stdout.encoding in CLI output (fixes #1597) When sys.stdout.encoding is None (e.g. when stdout is redirected to a binary stream), calling str.encode(None) raises a TypeError. Fall back to utf-8 in that case so the CLI does not crash. --- packages/markitdown/src/markitdown/__main__.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/markitdown/src/markitdown/__main__.py b/packages/markitdown/src/markitdown/__main__.py index 6085ad6bb..54ac54452 100644 --- a/packages/markitdown/src/markitdown/__main__.py +++ b/packages/markitdown/src/markitdown/__main__.py @@ -206,11 +206,11 @@ def _handle_output(args, result: DocumentConverterResult): with open(args.output, "w", encoding="utf-8") as f: f.write(result.markdown) else: - # Handle stdout encoding errors more gracefully + # Handle stdout encoding errors more gracefully, with fallback for + # cases where sys.stdout.encoding is None (e.g. redirected streams). + encoding = sys.stdout.encoding or "utf-8" print( - result.markdown.encode(sys.stdout.encoding, errors="replace").decode( - sys.stdout.encoding - ) + result.markdown.encode(encoding, errors="replace").decode(encoding) )