- Notifications
You must be signed in to change notification settings - Fork768
Description
There seems to be a discrepancy between pythonnet and system-installed python when determining the file-system-encoding.
This is my pythonnet code:
Runtime.PythonDLL="/usr/lib/x86_64-linux-gnu/libpython3.12.so";PythonEngine.Initialize();PythonEngine.BeginAllowThreads();using(Py.GIL()){dynamicsys=Py.Import("sys");Console.WriteLine("Filesystem encoding: {0}",sys.getfilesystemencoding());Console.WriteLine("Default encoding: {0}",sys.getdefaultencoding());}
Which prints:
Filesystem encoding: asciiDefault encoding: utf-8However, this is not correct! First, it only prints this on Linux. On windows, the filesystem-encoding is correctly determined to be 'utf-8'. Running a simple oneliner in python itself returns the correct values on both platforms:
$ python -c "import sys; print(sys.getfilesystemencoding()); print(sys.getdefaultencoding())"utf-8utf-8The python-version is 3.12.3, the dotnet version is 8.0.408 on both platforms as well.
I've tried to work around this with environment variables, but those aren't recognized as expected, see#2539 (comment)
Another option might be to callPySys_AddXOption with"utf8" to set UTF-8 Mode manually, but pythonnet has no binding for this function.
I'm at a loss about what to do next. This seems like a genuine bug, so I opened this here instead of starting a discussion.