fix: properly configure UTF-8 encoding for Python stdio
- 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 <noreply@anthropic.com>
This commit is contained in:
parent
0f518127ec
commit
b390a087bc
|
@ -140,6 +140,11 @@ PyStatus init_python(const char *program_name)
|
||||||
PyConfig config;
|
PyConfig config;
|
||||||
PyConfig_InitIsolatedConfig(&config);
|
PyConfig_InitIsolatedConfig(&config);
|
||||||
config.dev_mode = 0;
|
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,
|
PyConfig_SetBytesString(&config, &config.home,
|
||||||
narrow_string(executable_path() + L"/lib/Python").c_str());
|
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 pyconfig;
|
||||||
PyConfig_InitIsolatedConfig(&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
|
// CRITICAL: Pass actual command line arguments to Python
|
||||||
status = PyConfig_SetBytesArgv(&pyconfig, argc, argv);
|
status = PyConfig_SetBytesArgv(&pyconfig, argc, argv);
|
||||||
if (PyStatus_Exception(status)) {
|
if (PyStatus_Exception(status)) {
|
||||||
|
|
Loading…
Reference in New Issue