Allow NetBeans to run from paths with certain international characters in them.
diff --git a/src/main/cpp/ide/nblauncher.cpp b/src/main/cpp/ide/nblauncher.cpp
index 338e7a7..2bd940e 100644
--- a/src/main/cpp/ide/nblauncher.cpp
+++ b/src/main/cpp/ide/nblauncher.cpp
@@ -183,10 +183,43 @@
 
     baseDir = path;
     
-    //check baseDir for non-ASCII chars
+    /* The JavaVMOption.optionString interface forces us to stick to ANSI
+    strings only, using whichever codepage is the default on the current Windows
+    installation (e.g. windows-1252 for US Windows). For any Unicode characters
+    that cannot be encoded using the current ANSI codepage, Win32 functions
+    such as GetModuleFileName (used by getCurrentModulePath) and
+    GetCurrentDirectory will substitute a question mark, which we detect here.
+    Note that the ANSI codepage is a superset of ASCII; it can accomodate a
+    limited selection of international characters that Microsoft once considered
+    appropriate for the current Windows locale.
+
+    It would be easy enough to switch the launcher process to UTF-8 everywhere;
+    this can be configured from the manifest file
+    (see https://learn.microsoft.com/en-us/windows/apps/design/globalizing/use-utf8-code-page ).
+    String types in these sources could remain as "char *" rather than
+    wchar_t. The problem is that JNI will still seems to expect parameters to be
+    passed using the default Windows codepage.
+
+    I tried setting UTF8 in the manifests and using the --fork-java parameter
+    to use the old CreateProcess launcher rather than JNI, but this still
+    causes a "Could not find or load main class org.netbeans.Main" error. I
+    also tried doing MultiByteToWideChar from UTF8 to wchar_t and calling
+    CreateProcessW; it does not fix the problem even though changing the command
+    line to prefix "cmd /c echo" causes my Cyrillic test character to show up
+    correctly on the Windows command line.
+
+    Other approaches which were attempted, but demeed too fragile:
+    1) Set the current directory to baseDir and pass relative paths only.
+       (Still led to ClassNotFoundException from ProxyClassLoader, which would
+       have needed to be fixed. And doesn't work e.g. for the home directory,
+       e.g. if the username itself has problematic characters in it.)
+    2) Using the GetShortPathNameW function to get an equivalent
+       Windows 95 style "8.3" compatibility path (e.g. "C:\Users\CHARTE~1").
+       This worked, but is too likely to create problems down the line.
+    */
     for (size_t i = 0; i < baseDir.size(); ++i) {
-        if (!(baseDir[i]>=' ' && baseDir[i]<='~')) {
-            logErr(false, true, "Cannot be run from folder that contains non-ASCII characters in path.");
+        if (baseDir[i] == '?') {
+            logErr(false, true, "Cannot run in this folder; the path \"%s\" contains problematic characters.", path);
             return false;
         }
     }