From 0750e14ecc94aa7bb1e264a13b98a8f2955be745 Mon Sep 17 00:00:00 2001 From: nightcityblade Date: Sun, 8 Mar 2026 12:18:37 +0800 Subject: [PATCH] fix: add encoding='utf-8' to CLI file operations On Windows, the default encoding (e.g. 'charmap' / cp1252) cannot encode certain Unicode characters found in crawled content, causing 'charmap' codec errors when writing output files. Explicitly set encoding='utf-8' on all file open() calls in the CLI. Fixes #1762 --- crawl4ai/cli.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/crawl4ai/cli.py b/crawl4ai/cli.py index 51b535002..d9c6586f9 100644 --- a/crawl4ai/cli.py +++ b/crawl4ai/cli.py @@ -48,12 +48,12 @@ def get_global_config() -> dict: config_dir.mkdir(parents=True, exist_ok=True) return {} - with open(config_file) as f: + with open(config_file, encoding="utf-8") as f: return yaml.safe_load(f) or {} def save_global_config(config: dict): config_file = Path.home() / ".crawl4ai" / "global.yml" - with open(config_file, "w") as f: + with open(config_file, "w", encoding="utf-8") as f: yaml.dump(config, f) def setup_llm_config() -> tuple[str, str]: @@ -1235,20 +1235,20 @@ def crawl_cmd(url: str, browser_config: str, crawler_config: str, filter_config: click.echo(main_result.markdown.fit_markdown) else: if output == "all": - with open(output_file, "w") as f: + with open(output_file, "w", encoding="utf-8") as f: if isinstance(result, list): output_data = [r.model_dump() for r in all_results] f.write(json.dumps(output_data, indent=2)) else: f.write(json.dumps(main_result.model_dump(), indent=2)) elif output == "json": - with open(output_file, "w") as f: + with open(output_file, "w", encoding="utf-8") as f: f.write(main_result.extracted_content) elif output in ["markdown", "md"]: - with open(output_file, "w") as f: + with open(output_file, "w", encoding="utf-8") as f: f.write(main_result.markdown.raw_markdown) elif output in ["markdown-fit", "md-fit"]: - with open(output_file, "w") as f: + with open(output_file, "w", encoding="utf-8") as f: f.write(main_result.markdown.fit_markdown) except Exception as e: