Я использую вызов API для загрузки и запуска JVM в коде C. Для этого я использую структуру Java JavaVMOption. В частности, я использую его элемент char *optionString, чтобы указать мой -Dbs.prefsdir="c:\\develop\\XXXXChineseMixedLationCharsXXXX\\"
, где bs.prefdir
- это путь, который может быть определен пользователем.
То, что я делаю, прямо из примеров Java, и оно отлично работает вплоть до того момента, когда мне нужно использовать путь с широкими символами/юникодами - я не могу этого сделать, потому что optionString - это char * не wchar_t *. Кто-нибудь знает, как обойти это? Решения должны быть ограничены JDK 1.6 и ниже.
Я внимательно прочитал документацию JNI: http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/invocation.html#wp633
char *optionString; /* the option as a string in the default platform encoding */
Я прочитал часть исходного кода исполняемого файла запуска eclipse, там он сделал что-то вроде преобразования широких символов в многобайтовые символы с кодовой страницей по умолчанию:
int byteCount = WideCharToMultiByte (CP_ACP, 0, (wchar_t *)src, -1, NULL, 0, NULL, NULL);
char *dest = malloc(byteCount+1);
dest[byteCount] = 0;
WideCharToMultiByte (CP_ACP, 0, (wchar_t *)src, -1, dest, byteCount, NULL, NULL);
return dest;
Я попытался обработать optionString как многобайтовую строку символов, используя приведенный выше код, и это не работает. Я пытался рассматривать его как сам юникод, но это тоже не работает. У кого-нибудь есть решение для этого, пожалуйста?
-D
, вы можете использовать JNI для вызоваSystem.setProperty
, чтобы добиться того же. - person Holger   schedule 18.11.2013