JNI启动支持Unicode的JVM

u4dcyp6a  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(262)

我正在使用调用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本身,但是也没有用。有人有解决这个问题的方法吗?

qxgroojn

qxgroojn1#

传递给JNI_CreateJavaVM的参数采用平台的默认编码,因此我不认为您能够将宽字节字符串传递给JavaVMOption结构。
尝试Holger的建议,在创建JVM之后,使用正确编码样式的jstring设置system属性。

相关问题