gpt4 book ai didi

java - JNI 以 unicode 支持启动 jvm

转载 作者:行者123 更新时间:2023-11-30 09:15:10 28 4
gpt4 key购买 nike

我正在使用调用 api 在 C 代码中加载和运行 jvm。我正在使用 java 结构 JavaVMOption 来执行此操作。具体来说,我正在使用它的元素字符 *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 本身,但这也不起作用。请问有人对此有解决方案吗?

最佳答案

传递给 JNI_CreateJavaVM 的参数采用平台的默认编码,因此我认为您无法将宽字节字符串传递到 JavaVMOption 结构中。

尝试 Holger 的建议,即在创建 JVM 后使用正确编码样式的 jstring 设置系统属性。

关于java - JNI 以 unicode 支持启动 jvm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20052455/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com