I so wanted to be the first to provide the fix to the Open File dialog not handling UTF-8, but Michael Jung beat me at it :-/
While trying Michael Jung's fix, I found this other issue: when wine is run in an UTF-8 locale, and a native PE executable exists with an UTF-8 encoded filename (for example gatón.exe with an [U+00F3 LATIN SMALL LETTER O WITH ACUTE]), any attempt to run this executable will fail with the following message:
wine: cannot open builtin library for <your executable name>: f
This suggests that wine somehow thinks the UTF-8 encoded filename is a builtin library instead of an actual PE file. So I dug into dlls/kernel/process.c and found the following:
* Function __wine_kernel_init() calls find_exe_file() with exe_nameW set to the Unicode version of the exename, and expects main_exe_file to be set for a native exe, or NULL for a builtin. * Function find_exe_file() is supposed to try loading the file as builtin, then native. For the builtin try, it calls open_builtin_exe_file() to test whether a builtin exists with the specified name, and expects the flag file_exists to be set on return. * Function open_builtin_exe_file() does a couple of sanity checks on the filename, including checking that all characters of the filename are in the 7-bit ASCII range (0..127), then delegates the file-exists test to wine_dll_load_main_exe().
The problem arises because open_builtin_exe_file() fails to set the file_exists flag either way when a sanity check fails. The Unicode version of the UTF-8 encoded exename fails the 7-bit ASCII test, but the function leaves file_exists uninitialized. Therefore the rest of the code thinks that the filename references a builtin (since file_exists is nonzero) and then the loading fails. The one-line fix attached simply sets file_exists to false *before* doing anything else in open_builtin_exe_file(), so that a filename that fails the sanity checks is properly flagged as non-existing.
Changelog: * Initialize file_exists to 0 at exe load test, prevents mistaking of UTF-8 encoded exenames as builtins.
Alex Villacís Lasso