我正在使用调用api在C代码中加载并运行jvm。我使用java结构JavaVMOption来做到这一点。具体而言,我正在使用它的元素
char * optionString
指定我的-Dbs.prefsdir="c:\\develop\\XXXXChineseMixedLationCharsXXXX\\"
其中bs.prefdir
的路径可以由用户定义。
我正在做的是直接用java示例,它工作正常,直到我需要使用宽字符/ unicode路径 - 我不能这样做,因为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视为多字节字符串,但这不起作用。我曾尝试将其视为unicode本身,但这也不起作用。请问有人解决这个问题吗?
答案 0 :(得分:2)
传递给JNI_CreateJavaVM的参数是平台的默认编码,因此我不相信您能够将宽字节字符串传递给JavaVMOption结构。
在创建JVM之后,尝试Holger建议使用正确编码样式的jstring设置系统属性。