From b390a087bc86695cf86e88f1c169e36a5fd5f6ed Mon Sep 17 00:00:00 2001 From: John McCardle Date: Sun, 6 Jul 2025 01:42:03 -0400 Subject: [PATCH] fix: properly configure UTF-8 encoding for Python stdio MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Use PyConfig to set stdio_encoding="UTF-8" during initialization - Set stdio_errors="surrogateescape" for robust handling - Configure in both init_python() and init_python_with_config() - Cleaner solution than wrapping streams after initialization - Fixes UnicodeEncodeError when printing unicode characters 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- src/McRFPy_API.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/McRFPy_API.cpp b/src/McRFPy_API.cpp index a1ed25f..2b0c11b 100644 --- a/src/McRFPy_API.cpp +++ b/src/McRFPy_API.cpp @@ -140,6 +140,11 @@ PyStatus init_python(const char *program_name) PyConfig config; PyConfig_InitIsolatedConfig(&config); config.dev_mode = 0; + + // Configure UTF-8 for stdio + PyConfig_SetString(&config, &config.stdio_encoding, L"UTF-8"); + PyConfig_SetString(&config, &config.stdio_errors, L"surrogateescape"); + config.configure_c_stdio = 1; PyConfig_SetBytesString(&config, &config.home, narrow_string(executable_path() + L"/lib/Python").c_str()); @@ -187,6 +192,11 @@ PyStatus McRFPy_API::init_python_with_config(const McRogueFaceConfig& config, in PyConfig pyconfig; PyConfig_InitIsolatedConfig(&pyconfig); + // Configure UTF-8 for stdio + PyConfig_SetString(&pyconfig, &pyconfig.stdio_encoding, L"UTF-8"); + PyConfig_SetString(&pyconfig, &pyconfig.stdio_errors, L"surrogateescape"); + pyconfig.configure_c_stdio = 1; + // CRITICAL: Pass actual command line arguments to Python status = PyConfig_SetBytesArgv(&pyconfig, argc, argv); if (PyStatus_Exception(status)) {