I moved most code to win32.c, and included argv[0] in conversion.
Different file systems can use various encoding for filenames. (NTFS, FAT32, etc.) But `CommandLineToArgvW` always provide filenames in UTF-16. So in the case of windows api functions, underlying file system usually should not be a problem.
It's easy to get some random CJK characters from typing code unit. (Ctrl+Shift+I on firefox/chrome, in the console, type '\u6666')